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