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 build
、docker run
命令,我会在其他的文章进行讲解