docker简单入门之使用docker容器部署简单的java web开源项目jpress博客程序

一、在centos7.3上安装docker
前置条件
x86_64-bit 系统
kernel 3.10+

1.检查内核版本,返回的值大于3.10即可
[[email protected] ~]# uname -r
3.10.0-514.el7.x86_64

2.使用 sudo 或 root 权限的用户登入终端

3.卸载旧版本(如果安装过旧版本的话)
# yum remove docker docker-common docker-selinux docker-engine

4.安装需要的软件包
# yum-util提供yum-config-manager功能#另外两个是devicemapper驱动依赖的

$ yum install -y yum-utils device-mapper-persistent-data lvm2

5.设置yum源
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6.安装docker
6.1. 安装最新版本
$ yum install -y docker-ce

6.2. 安装指定版本
#查询版本列表
$ yum list docker-ce --showduplicates | sort -r已加载插件:fastestmirror, langpacks已安装的软件包可安装的软件包
 * updates: mirrors.163.comLoading mirror speeds from cached hostfile
 * extras: mirrors.163.com
docker-ce.x86_64            17.09.1.ce-1.el7.centos            docker-ce-stable
docker-ce.x86_64            17.09.0.ce-1.el7.centos            docker-ce-stable...#指定版本安装(这里的例子是安装上面列表中的第二个)
$ yum install -y docker-ce-17.09.0.ce

7.启动docker服务

systemctl start docker.service
7.验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

[[email protected] ~]# docker version
Client:
 Version:    18.03.0-ce
 API version:    1.37
 Go version:    go1.9.4
 Git commit:    0520e24
 Built:    Wed Mar 21 23:09:15 2018
 OS/Arch:    linux/amd64
 Experimental:    false
 Orchestrator:    swarm

Server:
 Engine:
  Version:    18.03.0-ce
  API version:    1.37 (minimum version 1.12)
  Go version:    go1.9.4
  Git commit:    0520e24
  Built:    Wed Mar 21 23:13:03 2018
  OS/Arch:    linux/amd64
  Experimental:    false

二、镜像的安装和简单操作
1.拉取并运行hello-world测试镜像
# 查看镜像 [[email protected]
~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE # 拉取hello-world镜像 [[email protected] ~]# docker pull hello-world 运行hello-world # 运行hello-world镜像 [[email protected] ~]# docker run hello-world 三、容器的网络 1.拉取并运行nginx镜像 # 拉取nignx镜像 # docker pull nginx 因为nginx需要在外部访问,而我们是无法直接访问容器里面的应用的,需要进行端口映射 # 后台启动nginx容器 [[email protected] ~]# docker run -d nginx e07f4cbc4ea9d7e53944b729535a596a651d278531a3450d25ea733b2f60a9ac # 启动nginx容器,将容器的80端口映射到宿主机的8080端口上 [[email protected] ~]# docker run -d -p 8080:80 nginx b1194639fc58f2fb24adaa72140cd0e44ee88d133fc73d846b93c4ca57c8fb39 # 查看容器状态 [[email protected] ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b1194639fc58 nginx "nginx -g 'daemon of…" 2 seconds ago Up 1 second 0.0.0.0:8080->80/tcp elastic_mayer [[email protected] ~]# netstat -an|grep 8080 tcp6 0 0 :::8080 :::* LISTEN 进入容器,原生nginx容器只支持少量的命令 [[email protected] ~]# docker exec -it b1194639fc58 bash [email protected]:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr [email protected]:/# nginx status nginx: invalid option: "status" [email protected]:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx 访问宿主机的8080端口就可以访问容器里的nginx服务了 停用nginx,重新启动nginx [[email protected] ~]# docker stop b1194639fc58 b1194639fc58 [[email protected] ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 刚才我是将容器的端口指定到宿主机的特定端口,我们还可以将将容器的内部的端口映射到宿主机的随机端口,可以看到nginx的80映射到了宿主机的32768端口上 [[email protected] ~]# docker run -d -P nginx 16f19cac53494281f184799e94dbde41cfae672f68509363c26191e44aab8fa4 [[email protected] ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 16f19cac5349 nginx "nginx -g 'daemon of¡­" 4 seconds ago Up 2 seconds 0.0.0.0:32768->80/tcp competent_davinci # 可以看到宿主机中监听了32768端口,访问宿主机的32768也可以正常访问nginx [[email protected] ~]# netstat -an|grep 32768 tcp6 0 0 :::32768 :::* LISTEN 四、制作自己的镜像,运行一个自己的java web程序 这里已一个java的开源博客系统jpress举例,jpress是一个类似wordpress的博客程序,区别是一个是php源码,一个是java源码 1.下载jpress的war包 2.下载tomcat容器作为基础镜像,并编写Dockefile文件 [[email protected] ~]# docker pull tomcat 在jpress.war所在目录建立Dockefile文件 [[email protected] ~]# cat Dockerfile # 说明是以tomcat为基础模板 from tomcat # 容器的版权信息 MAINTAINER jack [email protected]163.com # 拷贝war包发布到tomcat的www web程序发布目录 COPY jpress.war /usr/local/tomcat/webapps 3.创建一个叫做jpress:latest的镜像 [[email protected] ~]# docker build -t jpress:latest .
启动容器将容器的8080端口映射到宿主机的8888 [[email protected]
~]# docker run -d -p 8888:8080 jpress 04252a52ecffab83d151a7d37aa24c0acd0b7bc75607b6cc8da2c017ee84ac4b 访问tomcat,可以看到能够正常访问jpress,http://192.168.3.177:8888/jpress/
docker简单入门之使用docker容器部署简单的java web开源项目jpress博客程序
4.安装mysql镜像
因为jpress后台依赖mysql数据库,需要安装mysql
# docker pull mysql

运行mysql容器,3306映射到宿主3306,创建密码,数据库为jpress
[[email protected] ~]# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=jpress mysql
7b2ea4ced739ef2e296513f67fcef5fea104a70a1b6badef56cd4fde99df6bc7

现在jpress依赖的mysql和tomcat安装启动完毕,需要继续安装jpress程序,注意数据库主机需要填写宿主机的ip,因为Localhost是找容器的localhost,jpress容器中没有mysql只有Jpress程序

5.重新启动Jpress,再次访问网站就ok了
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7b2ea4ced739        mysql               "docker-entrypoint.s¡­"   8 minutes ago       Up 8 minutes        0.0.0.0:3306->3306/tcp   vigilant_perlman
04252a52ecff        jpress              "catalina.sh run"        23 minutes ago      Up 23 minutes       0.0.0.0:8888->8080/tcp   lucid_tesla
16f19cac5349        nginx               "nginx -g 'daemon of¡­"   About an hour ago   Up About an hour    0.0.0.0:32768->80/tcp    competent_davinci
[[email protected] ~]# docker restart 04252a52ecff

至此,使用docker部署我们自己的一个Java web程序就告一段落