一、前言
前一篇 Docker实战之一 我们介绍了Dokcer 镜像和容器基本概念,这一节我们来具体制作一个镜像文件并进行快速部署,这个镜像文件是我们的测试环境,主要包含JDK1.8、Nginx、Git、Node、Gradle,基础镜像为CentOS,另外安装一些常用的工具,两个Java项目、两个前端项目,镜像生成后,如果要部署一台新的机器,直接启动该镜像进入容器执行四个发布脚本即可,Redis和MySQL、S3等存储相关的是直接连远程机器。采用该方案部署一台新机器最多10分钟就可以部署好,没有用Docker之前新买一台机器安装各种软件部署应用要折腾小半天。
二、制作镜像文件基础环境配置
机器IP:120.26.69.172 OS:Ubuntu 16.04 64位
1、更新软件源软件列表 apt-get update
2、安装Docker apt-get install docker.io
3、拉取CentOS Base镜像 docker pull centos
4、查看CentOS Base镜像 docker images
5、运行CentOS镜像并进入容器
docker run -it 5d0da3dc9764 bash
6、在宿主机查看容器 docker ps
可以查看容器ID和运行时间等,容器ID和镜像ID是两回事。
三、在容器内安装常用工具
1、yum install wget 用于下载文件
2、yum install lrzsz 用于上传文件
3、yum install vim 用于编辑配置文件
4、yum install net-tools 用于查看端口
5、yum install zip 用于解压文件
5、将安装了常用的工具的容器保存为镜像
docker commit -m 'tools' 835d3fcbc3d2 cw/tools:v1.0
835d3fcbc3d2:是容器的ID
6、查看生成新的镜像文件
7、退出容器,并用新的镜像启动容器
exit
docker run -it 0de282b05a01 bash
注:在新的容器中 wget、vim、netstat、rz这些刚才安装的工具都可以使用,如果安装后没有做commit生成新的镜像,你退出容器再重新用基础镜像进入容器,这些工具都没有了。
四、在容器内安装JDK1.8并配置环境变量
因为Oracle官网JDK需要登录用户才能下载,所以我先下载到本地,然后在容器内执行rz将zxvf jdk-8u151-linux-x64.tar.gz上传到容器内。
1、解压 tar -zxvf jdk-8u151-linux-x64.tar.gz
2、配置JDK环境变量 vim ~/.bashrc
注:这里修改/etc/profile或.bash_profile下次进入容器时环境变量无效,原因未确认。
source ~/.bashrc 、java -version
3、将容器的变更保存为镜像
docker commit -m 'jdk' 71aa4be3f85a cw/jdk:v1.1
4、用新的镜像重新运行容器
docker run -it 3678c6188d77 bash
五、在容器内安装配置Nginx
1、安装Nginx yum install nginx
2、创建Web工程目录 mkdir posweb、mkdir posadm
3、配置Nginx vim /etc/nginx/nginx.conf
4、设置Nginx自动启动 systemctl enable nginx.service
5、启动Nginx systemctl start nginx
报错信息如下:
6、使用Systemctl启动报错,在启动容器时需要加参数
先保存容器内容生成新的镜像
docker commit -m 'nginx' 071c76fec205 cw/nginx:v1.2
重新启动容器
docker run -itd --privileged=true -p 8083:8083 -p 8084:8084 548d1b35a402 /sbin/init
两个Web应用端口8083、8084 宿主机与容器内部端口号映射,提供给外部访问。
进入容器 docker exec -it 45fe761e3724 /bin/bash
systemctl start nginx 就可以正常启动Nginx
六、在容器内安装打包编译环境
1、安装Git yum install git
2、安装Node yum install nodejs
3、安装Gradle wget https://downloads.gradle.org/distributions/gradle-5.1-all.zip
unzip gradle-5.1-all.zip
vim ~/.bashrc
4、保存为新的镜像文件
docker commit -m 'compile' 45fe761e3724 cw/compile:v1.3
七、在容器内安装发布脚本
1、应用发布脚本
cd /publish_script
deploy_dev_pos_web.sh
deploy_dev_pos.sh (略)
deploy_dev_store_task.sh (略)
deploy_dev_pos_adm.sh (略)
2、保存为新的镜像文件
docker commit -m 'app' 45fe761e3724 cw/app:v1.4
八、将最新的镜像文件推到Docker仓库
1、登录docker官方仓库 docker login
2、给镜像打个新标签
docker tag 1136bb28e827 qingcai18036/cw:v2.0
3、推送到远程私有仓库
docker push qingcai18036/cw:v2.0
注:生成的镜像有2.7G,推到Docker官方仓库用了十几分钟,下载还算比较快,可以使用阿里云的镜像仓库。
九、使用镜像文件部署应用
1、安装Docker apt-get install docker.io
2、登录docker官方仓库 docker login
3、拉取镜像 docker pull qingcai18036/cw:v2.0
4、运行镜像
docker run -itd --privileged=true -p 8083:8083 -p 8084:8084 1136bb28e827 /sbin/init
5、进入容器
docker exec -it 117d69d8d6b5 /bin/bash
6、执行发布脚本
./deploy_dev_pos.sh
./deploy_dev_pos_web.sh
./deploy_dev_store_task.sh
./deploy_dev_pos_adm.sh
十、Docker基本命令
注:下次再讲一下使用DockerFile制作镜像文件。