Docker(四) -- Dockerfile文件编写

一:摘要概述

前面的文章中详细介绍了Docker的镜像、容器、文件组件,但是使用Docker最关键的一步还是编写Dockerfile文件,通过Dockerfile文件将应用项目构建为镜像使用。下面将详细介绍如下几个部分:

  1. 远程连接Docker
  2. Dockerfile常用命令
  3. 编写文件注意事项
  4. 应用镜像构建实战

二:远程连接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中可以直接将镜像发布到远程服务器,也可以在如下界面中配置参数,镜像信息等
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章