Dockerfile构建镜像常用指令
1.常用命令
Dockerfile是一个文本文件,包含了一条条的指令,在基于指定的镜像上,一条指令构建一层,最终构建出一个新的镜像。
关键字 | 作用 | 备注 | 格式 |
---|---|---|---|
FROM | 指定基础镜像 | 指定基于哪个镜像开始构建 | FROM <image>:<tag> |
MAINTAINER | 作者信息 | 标明这个dockerfile是谁写的(已弃用) | MAINTAINER xxx xxx |
LABEL | 标签 | 给镜像添加元数据,以键值对的形式,可以理解类似注释 | LABEL <key>=<value> <key>=<value> <key>=<value> |
RUN | 制作镜像时执行的命令 | 构建镜像时运行的指令,默认是/bin/sh | RUN <命令行命令> 或RUN["可执行文件", "参数1", "参数2"...,"参数n"] (相当于:RUN 可执行文件 参数1 参数2 … 参数n) |
CMD | 容器启动时执行的命令 | 运行容器时执行的shell环境。每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。 | 有3种格式: 1.exec执行: CMD ["executable","param1","param2"] 2./bin/sh中执行: CMD command param1 param2 3.提供给 ENTRYPOINT 的默认参数: CMD ["param1","param2"] |
ENTRYPOINT | 入口 | 一般在制作一些执行就关闭的容器中会使用 | ENTRYPOINT ["executable", "param1", "param2"] |
COPY | 复制文件到镜像中 | 构建的时候复制文件到镜像中 | COPY 源路径 目标路径 (源路径是宿主机的路径,目标路径是容器的路径) |
ADD | 添加文件 | 构建时添加文件到镜像中,与COPY的区别是ADD会自动解压 | ADD 源路径 目标路径 (源路径是宿主机的路径,目标路径是容器的路径) |
ENV | 环境变量 | 在构建镜像时,设置环境变量,可以在启动容器的时候,通过-e覆盖(即容器内也可以使用) | ENV <key> <value> |
ARG | 构建参数 | 用于指定传递给构建运行时的变量(给dockerfile传参),相当于构建镜像时可以在外部为里面传参 | ARG <name>[=<default value>] |
VOLUME | 定义外部可以挂载的匿名数据卷 | 在启动容器时若忘记挂载数据卷,会自动挂载到匿名卷 | VOLUME ["/xxx/xx/xxxx", "xxx", ..., "xxx"] |
EXPOSE | 声明容器的服务端口 | 仅仅声明容器的服务端口(及提供服务的端口) | EXPOSE 端口号 |
WORKDIR | 工作目录 | 指定容器的开始工作目录(若没有时会自动创建)。设置之后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行 | WORKDIR 最好是绝对路径 |
USER | 指定容器执行用户 | 指定运行容器时的用户名或ID执行用户 | USER user |
2.注意事项
1.Dockerfile本质是一个文件,通过指令描述镜像的构建过程。
2.Dockerfile的注释符号是`#`。
3.Dockerfile的第一行必须是FROM,从一个基础镜像来构建。
4.通过Dockerfile构建镜像命令格式为:"docker build -f Dockerfile文件路径 -t 镜像名称:版本 ."
1.默认一般把文件命名为Dockerfile,然后构建命令直接用"docker build -t 要保存的镜像名称:版本 ."
2.最后的"."的含义是将当前目录告诉docker引擎,然后当执行"docker build"命令后,本机将当前目录下的所有文件发送给docker引擎,最后由docker引擎完成镜像的构建