Dockerfile讲解

Dockerfile是Docker容器的描述文件,用于Docker容器中Image的构建。

常用到的一些构建命令如下:

  • FROM

    指定当前的Image的基础容器。

    为了方便容器的构建,每个容器都可以指定一个他的基础容器,再在基础容器进行自定义的扩展。

  • MAINTAINER

    记录容器的维护人员信息,标注容器的作者。

  • ARG

    设置Dockerfile文件中会使用到的变量参数名和默认值,变量值也可以由外面传入。

  • ENV

    定义容器中的环境变量,以方便容器中的应用使用。

  • RUN

    构建容器时,运行的命令。一个Dockerfile中,可以有多行RUN命令,来执行相应的命令。

  • ADD

    添加文件到容器中,如果添加的文件是压缩文件,会自动解压。

  • COPY

    复制文件到容器中。和ADD区别,就是COPY的压缩文件,系统不会自动解压。

  • ENTRYPOINT

    容器启动时执行的命令。一个容器中虽然可以有多个ENTRYPOINT,但仅有最后一个才会有效。

  • USER

    设置workdir下的目录用户。在否写权限要求严格的服务器中,需要正确指定正确的用户,否则可能会提示访问错误。

  • WORKDIR

    设置容器的工作目录。

  • VOLUME

    绑定宿主的文件或目录到容器中。由于容器在每次构建的时候,都会删除原容器,相应的容器中的数据都会丢失。所以,一些需要持久保存的数据,就需要通过VOLUME来进行绑定,将容器中的数据文件拉取到宿主电脑中,例如数据库的Data目录等等。

  • EXPOSE

    设置从容器中暴露出来的端口。

  • CMD

    启动容器时,执行的命令。

  • HEALTHCHECK

    设置容器健康状态的命令和判断条件。

下面以一个tomcat的自定义Dockerfile来简单说明下上面命令的使用。

FROM centos:7

# java
ADD openjdk-14_linux-x64_bin.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk-14

# tomcat
ADD apache-tomcat-9.0.33.tar.gz /usr/local

WORKDIR /usr/local/apache-tomcat-9.0.33
EXPOSE 8080
CMD ["/bin/bash", "-C", "./bin/catalina.sh", "run"]

然后运行下面的命令来构建Docker容器:

>docker build -t my_tomcat:v1 .
Step 1/7 : FROM centos:7
 ---> 5e35e350aded
Step 2/7 : ADD openjdk-14_linux-x64_bin.tar.gz /usr/local
 ---> Using cache
 ---> b015e0f63a3a
Step 3/7 : ENV JAVA_HOME /usr/local/jdk-14
 ---> Using cache
 ---> 6b028b065839
Step 4/7 : ADD apache-tomcat-9.0.33.tar.gz /usr/local
 ---> Using cache
 ---> a8e77c065263
Step 5/7 : WORKDIR /usr/local/apache-tomcat-9.0.33
 ---> Using cache
 ---> c4d2211842f7
Step 6/7 : EXPOSE 8080
 ---> Using cache
 ---> 1b782ead759b
Step 7/7 : CMD ["/bin/bash", "-C", "./bin/calalina.sh", "run"]
 ---> Using cache
 ---> e3ccf12b8b23

在build命令的输出中,你会看到Dockerfile中定义的每一步的执行情况。-t参数用来指定当前构建的Docker Image的名字和版本。

当Image构建成功后,可以通过下面的里面,来查看我们刚刚构建的Image:

>docker image ls
my_tomcat              v1                  e3ccf12b8b23        3 minutes ago       553MB

虽然成功的构建了Docker Image,但是Image是不能直接运行的,我们还需要基于Image启动一个Instance实例,才能真正的使用我们的容器服务。我们可以通过下面命令来使用我们的Image实例化一个Docker Container容器:

docker run -it --name=my_tomcat_server -p 8080:8080 -v webapps:/usr/local/apache-tomcat-9.0.33/webapps/ my_tomcat:v1

启动成功后,通过游览器访问http://localhost:8080/就可以访问Tomcat首页,说明我们的容器已经启动成功。

有关docker builddocker run命令,我会在其他的文章进行讲解

Last Updated:
Contributors: 小5