一:摘要概述
前面的文章中详细介绍了Docker的镜像、容器、文件组件,但是使用Docker最关键的一步还是编写Dockerfile文件,通过Dockerfile文件将应用项目构建为镜像使用。下面将详细介绍如下几个部分:
- 远程连接Docker
- Dockerfile常用命令
- 编写文件注意事项
- 应用镜像构建实战
二:远程连接Docker
Docker安装的文章中介绍过Docker Engine包括了Server与Client两部分,自然在IDE工具中也能通过安装插件模拟客户端使用远程的服务端。接下来将通过IDEA安装Docker插件的方式介绍如何连接远程客户端
2.1 发布远程端口
Docker默认不会开放远程连接端口,需要自行修改配置文件后重启Docker服务发布
// 修改/etc/systemd/system/docker.service
// 将ExecStart选项修改为如下内容:
ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock -H tcp://0.0.0.0:2375
// 加载后台配置重启Docker应用
systemctl daemon-reload
systemctl restart docker.service
2.2 IDEA下载插件
IDEA下载插件的方式不再赘述,直接输入docker搜索下载下图所示插件重启IDEA应用即可。因为本人使用的是IDEA2019正版,已经默认安装好了相关插件就不演示相关过程
2.3 远程连接
IDEA下面就会显示一个Docker的图标,点击图标然后在控制台点击编辑按钮,进入这个页面就是编辑连接远程Docker服务。填好相关的IP端口即可,会提示连接成功亦或是失败。当然检查检查自己的防火墙最好
三:Dockerfile常用命令
Dockerfile文件就是系列命令组成,通过Docker解析执行相关操作。常用的命令不会超过十个,但是却满足日常百分之九十以上的需求
3.1 FROM
- 位置:位于Dockerfile文件除注释外第一行
- 作用:引入基础镜像,比如Java经常会引入Java镜像作为基础构建Java环境
3.2 ARG / ENV
- 位置:任意位置,只要在使用前声明即可
- 作用:控制动态参数
- 应用:$引用,但是最好使用${}标明界限
- 注意:ARG只能在构建镜像时传入,ENV不仅在构建镜像时可以传入,并且可以在运行容器时传入覆盖
3.3 MAINTAINER
- 位置:任意位置
- 作用:标注运维人员、联系方式等信息,镜像使用docker inspect可以看到
3.4 RUN
- 位置:任意位置
- 作用:执行shell命令,比如创建目录mkdir等
- 注意:多个RUN命令可以在后面使用
;\
连接为一个RUN命令
3.5 ADD / COPY
- 位置:任意位置
- 作用:复制文件
- 注意1:如果复制/home目录下的文件那么只会复制目录下文件,不会复制/home外层目录
- 注意2:ADD会将tar包自动解压缩,但是COPY命令不会
- 注意3:COPY可以拷贝远程网络资源,但是ADD不可以
3.6 EXPOSE
- 位置:任意位置
- 作用:容器暴露的端口
3.7 VOLUME
- 位置:任意位置
- 作用:挂载数据卷
3.8 USER
- 位置:任意位置
- 作用:声明容器运行使用的用户角色
3.9 WORKDIR
- 位置:任意位置
- 作用:声明使用docker exec命令进入容器后的工作目录
3.10 CMD / ENTRYPOINT
- 位置:任意位置
- 作用:容器启动时将会执行的命令
- 注意:CMD与ENTRYPOINT同时存在时CMD将会作为ENTRYPOINT的参数
四:注意事项
个人在编写Dockerfile文件的过程中遇到一些不大不小的坑,在这里记录
4.1 绝对路径
前面就讲过镜像层的概念,Dockerfile制作镜像时执行每个RUN命令都是创建一个临时容器,然后进入容器中执行shell,然后再commit修改打包新镜像层。所以千万别使用相对路径
4.2 Tomcat启动
使用Tomcat容器运行WEB应用时千万别使用startup.sh脚本,请使用catalina.sh运行run。这样才能使得Docker容器内应用持续运行,具体原因可以参考Docker运行原理
五:实战演练
下面是本人在制作一个应用项目过程中编写的Dockerfile文件,可以结合前面的常用命令作用理解。当然github上有许多Dockerfile示例文件,这玩意儿只有亲自动手操作你才会熟悉使用:
# 引入Java8基础镜像
FROM java:8
# apps下日期_SVN版本变量
ARG DATE_SVN
# Tomcat对外暴露端口
ARG TOMCAT_PORT
# Tomcat版本
ARG TOMCAT_VERSION
#应用版本
ARG APPLICATION_VERSION
# 标注维护人员、联系方式
MAINTAINER zsl 17301141124
# 镜像最后维护更新时间
ENV REFRESHED_AT 2019-11-28
# 创建系列文件夹
RUN cd /home;\
mkdir shortUrlM;\
groupadd tomcat;\
useradd tomcat_dlj -m -g tomcat;\
chown -R tomcat_dlj:tomcat shortUrlM;\
su tomcat_dlj;\
cd /home/tomcat_dlj;\
mkdir apps;\
mkdir logs;\
mkdir tomcat;\
cd /home/tomcat_dlj/apps;\
mkdir app_${TOMCAT_PORT}_beijing_dlj;\
cd /home/tomcat_dlj/apps/app_${TOMCAT_PORT}_beijing_dlj;\
mkdir $DATE_SVN;\
cd $DATE_SVN;\
mkdir dlj;\
cd /home/tomcat_dlj/logs;\
mkdir log_${TOMCAT_PORT}_beijing_dlj;
# 拷贝Tomcat文件
RUN cd /home/tomcat_dlj/tomcat/
ADD tomcat_8.5.47_15101_dlj.tar /home/tomcat_dlj/tomcat/
RUN mv /home/tomcat_dlj/tomcat/tomcat_8.5.47_15101_dlj /home/tomcat_dlj/tomcat/tomcat_${TOMCAT_VERSION}_${TOMCAT_PORT}_dlj
# 拷贝应用文件
RUN cd /home/tomcat_dlj/apps/app_${TOMCAT_PORT}_beijing_dlj/$DATE_SVN/dlj;\
mkdir $APPLICATION_VERSION;
ADD target/dlj /home/tomcat_dlj/apps/app_${TOMCAT_PORT}_beijing_dlj/$DATE_SVN/dlj/$APPLICATION_VERSION/
# 暴露端口
EXPOSE 15147
EXPOSE 15447
EXPOSE 15547
# 启动应用
USER tomcat_dlj
WORKDIR /home/tomcat_dlj
CMD ["/home/tomcat_dlj/tomcat/tomcat_8.5.47_15147_dlj/bin/catalina.sh","run"]
五:镜像制作
IDEA中可以直接将镜像发布到远程服务器,也可以在如下界面中配置参数,镜像信息等