Dockerfile简明教程

上一节中我们提到了,使用docker build 命令可以将Dockerfile生成镜像,Dockerfile中的内容其实就是镜像生成的一个个步骤。

下面就是一个有效的Dockerfile:

# 指定tomcat版本
FROM tomcat:8.5.32-jre8

# 指定工作目录
WORKDIR /app

# 将打包后的 server.jar 拷贝到镜像中
# 可以使用脉冲云的编译构建服务,在线将源码打包成 jar
ADD server.jar /app/server.jar

# 设置镜像的启动命令
CMD java -jar /app/server.jar

# 声明需要监听的端口
EXPOSE 8080

Dockerfile 中支持 # 开头的注释,然后就是一条条各种指令,下面我们一一了解下各种指令常用。

FROM

指定基础镜像,生成新镜像必须指定一个基础镜像,然后在此基础镜像上逐一运行随后的指令,最后生成新镜像,例如:

FROM ubuntu:16.04

RUN

在镜像内运行命令,注意,这是在镜像打包过程中运行的命令,不是启动容器后的命令。RUN指令常常用来在镜像打包过程中安装软件,例如:

RUN apt-get update \
  && apt-get install nginx

可以使用转移符 \ 书写多行指令

RUN其实调用的是标准的shell,所以可以通过 && 连接执行多个命令

CMD

指定容器启动时执行的命令,注意,和RUN的区别是:RUN是在打包过程中执行的命令。镜像中只能有一条CMD指令,如果有多个CMD指令,则以最后一条为准,所以我们可以覆盖基础镜像中定义的CMD指令。CMD指令支持三种格式:

  • CMD ["executable", "param1", "param2"] 使用exec执行
  • CMD command param1 param2 使用/bin/sh -c执行
  • CMD ["param1", "param2"] 提供给ENTRYPOINT的默认参数

ENTRYPOINT

容器启动入口,即容器启动后执行的命令,不会被CMD指令覆盖,如果存在ENTRYPOINT,那么CMD指令会充当ENTRYPOINT的参数。

ENTRYPOINT /app/entrypoint.sh

WORKDIR

指定后续RUN、CMD、ENTRYPOINT程序的工作目录,可以多次执行,就像Linux的 cd 命令。

WORKDIR /app
WORKDIR data
RUN pwd # /app/data

USER

指定后续RUN、CMD、ENTRYPOINT程序的用户名或UID。

USER nginx

ENV

声明一个环境变量,可为后续的RUN、CMD、ENTRYPOINT程序所使用。

ENV JAVA_HOME /opt/java

EXPOSE

声明容器需要暴露的端口号。

EXPOSE 80 443

VOLUME

声明容器运行时的数据卷挂载点,将主机目录挂载到容器中,用来持久化保存容器生成的数据。

VOLUME /app/data

ADD

将Dockerfile所在目录中的文件拷贝到镜像中,ADD <src> <dest>,如果 src 是一个tar包,那么会自动解压,并且src支持网络路径。

ADD server.jar /app/server.jar

COPY

和ADD类似,格式为 COPY <scr> <dest> ,复制本地文件到容器中,和ADD区别是,不会自动解压,推荐使用COPY。

COPY server.jar /app/server.jar
COPY . /app
COPY dist/* /app/

results matching ""

    No results matching ""