Dockerfile命令详解

先贴上自己写的一个生成Dockerfile的小工具
Github地址:Dockerfile-Generator

FROM

语法:

FROM <image>

FROM <image>:<tag>
  • 绝大多数情况下FROM是 Dockerfile 的第一个命令,它定义了该Dockerfile使用哪个基础镜像启动构建流程 。image可以是任何已存在的镜像。

  • FROM可以在一个 Dockerfile 中出现多次,以便于创建混合的 images。

  • 如果没有指定tag,latest 将会被指定为要使用的基础镜像版本。

MAINTAINER

语法:

MAINTAINER <name>
  • MAINTAINER用于声明作者

COPY/ADD

COPY语法:

COPY <src> <dest>

ADD语法:

ADD <src> <dest>
  • 推荐使用COPY

  • COPY/ADD将文件从路径src复制添加到容器内部路径dest

  • src可以为URL,当遇到URL时候,可以通过URL下载文件并且复制到dest

  • ADDCOPY基本没有区别,仅当用户希望复制到dest中的压缩文件可以自动解压时才需要使用ADD

CMD/ENTRYPOINT

CMD语法:

CMD ["executable","param1","param2"]

CMD command param1 param2

ENTRYPOINT语法:

ENTRYPOINT ["executable","param1","param2"]

ENTRYPOINT command param1 param2
  • 推荐使用CMD

  • CMD/ENTRYPOINT用于执行特定的命令,这些命令在用镜像构建容器后被调用。

  • 每个Dockerfile中只能存在一个CMD/ENTRYPOINT命令,如果指定了多个,那么只有最后一个会生效。

  • ENTRYPOINTCMD可以结合使用,此时CMD命令可以仅保留参数,参数将传递给ENTRYPOINT命令。

  • ENTRYPOINTCMD的区别在于ENTRYPOINT中的参数始终会被使用,而CMD的额外参数可以在容器启动时动态替换掉。

以下是两个例子:

仅使用ENTRYPOINT:
ENTRYPOINT ["/bin/echo", "Hello"]  

Hello           //通过 docker run -it [image] 启动容器时的输出
Hello CloudMan  //通过 docker run -it [image] CloudMan 启动容器时的输出
使用ENTRYPOINT和CMD:
ENTRYPOINT ["/bin/echo", "Hello"]  
CMD ["world"] 

Hello world     //通过 docker run -it [image] 启动容器时的输出
Hello CloudMan  //通过 docker run -it [image] CloudMan 启动容器时的输出

WORKDIR

语法:

WORKDIR <path>
  • WORKDIR命令用于为后续的RUN CMD ENTRYPOINT命令配置工作目录。

  • 一个Dockerfile可以使用多个WORKDIR命令,如果后续命令的参数是相对路径,则会基于之前命令指定的路径。

RUN

语法:

RUN ["executable","param1","param2"]

RUN command param1 param2
  • RUN的用法类似CMD,但是是在镜像构建的过程中执行的,用于对基础镜像进行定制化构建。

ENV

语法:

ENV <key>=<value>

ENV <key> <value>
  • ENV命令用于定义镜像的环境变量。

EXPOSE

语法:

EXPOSE <port>
  • EXPOSE命令用于指定端口,使容器内的应用可以通过端口和外界交互。

VOLUME

语法:

VOLUME ["path1","path2"]
  • VOLUME命令用于让容器访问宿主机上的目录。

ONBUILD

语法:

ONBUILD <command>
  • ONBUILD命令是镜像触发器,定义当该镜像被其他镜像作为基础镜像时执行的命令

USER

语法:

USER <name>
  • USER命令用于指定运行时的用户名或UID,后续的RUN命令也会使用指定的用户执行。

  • Dockerfile默认以root权限启动应用程序,为了安全考虑,除非必须使用root权限,否则推荐使用USER命令指定运行用户。

  • 要临时获取管理权限可以使用gosu,而不推荐sudo

LABEL

语法:

LABEL <key1>=<value1> <key2>=<value2>
  • LABEL命令用于添加元数据到镜像中。

  • 一个Dockerfile可以使用多个LABEL命令,每一个LABEL指令会生成一个新的镜像层。
    如果需要指定多个labels,推荐将所有的labels合并到同一个LABEL命令中。
    如果你使用多个LABEL命令,将导致构建出的镜像效率低下。

ARG

语法:

ARG <name>

ARG <name>=<value>
  • ARG命令用于定义构建时需要的参数,是唯一一个可用于FROM前的命令。

Docker自带的如下ARG参数,可以在其他指令中直接引用:

HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
FTP_PROXY
ftp_proxy
NO_PROXY
no_proxy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值