885
微信
Dockerfile 支持的指令__构建管理_用户指南_容器服务-阿里云
有用户容易将 Dockerfile 文件内的指令理解为 shell 脚本,其实并不是,Dockerfile 仅支持少部分的指令,下面介绍这些指令和功能。
FROM
FROM <image>
或者
FROM <image>:<tag>
或者
FROM <image>@<digest>
指定构建依赖的基础镜像,FROM
指令必须作为 Dockerfile 中第一条没有被注释的指令。
MAINTAINER
MAINTAINER <name>
指定镜像的 Author
字段。
RUN
shell 形式,command
作为 /bin/sh -c
的参数进行执行,即为 shell 的子进程。
RUN <command>
exec 形式,直接执行。
RUN ["executable", "param1", "param2"]
RUN 指令是在当前镜像上执行命令,并且提交执行之后的结果,作为最新的一层 layer,并且后续的 Dockerfile 指令会在 RUN 指令执行完生成的最新镜像上继续执行。
CMD
exec 形式,直接执行,推荐使用该形式。
CMD ["executable","param1","param2"]
第二种形式,作为ENTRYPOINT
指令的默认参数。
CMD ["param1","param2"]
第三种形式,shell形式,作为/bin/sh -c
的参数进行执行,即为 shell 的子进程。
CMD command param1 param2
在一个 Dockerfile 文件中,只能有一个CMD
指令,如果有多于一条CMD
指令,那只有最后一条CMD
指令会生效。
CMD
指令的主要目的是提供容器运行时的默认值,这些默认值可以包括一个可执行文件名,加上执行时的一些参数,或者不包含可执行文件名,只提供参数,但是必须通过增加一个ENTRYPOINT
指令来指定可执行文件名。
LABEL
LABEL <key>=<value> <key>=<value> <key>=<value> ...
LABEL
指令给一个镜像增加元信息metadata
。一个LABEL
是一个键值对。如果LABEL
值中需要包含空格或者换行符,使用双引号"
或者反斜杠。
下面是一些用例:
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates
that label-values can span multiple lines."
EXPOSE
EXPOSE <port> [<port>...]
EXPOSE
指令设置 Docker 容器在运行时监听指定网络端口。EXPOSE
指令并不会使得容器所在的主机可以访问容器的端口。为了使主机可以访问容器端口,必须使用 -p 或者 -P 参数。
ENV
ENV <key> <value>
ENV <key>=<value> ...
ENV
指令设置镜像的环境变量,可在实际启动容器时使用docker run --env <key>=<value>
进行覆盖。
ADD
有两种形式:
ADD <src>... <dest>
第二种形式用于路径或者文件名包含空格的情况。
ADD ["<src>",... "<dest>"]
如果src
是文件路径,则必须是相对于构建上下文context
的相对路径,且不能引用构建上下文目录之外的内容。dest
必须是绝对路径,或者是工作路径WORKDIR
的相对路径。如果dest
不存在,则将自动创建,如果dest
不以/
结尾,则将被认为是一个文件,而不是目录。
COPY
有两种形式:
COPY <src>... <dest>
第二种形式用于路径或者文件名包含空格的情况。
COPY ["<src>",... "<dest>"]
与ADD
类似,区别在于src
不能是网络链接 URL。
ENTRYPOINT
exec 形式,推荐使用该形式。
ENTRYPOINT ["executable", "param1", "param2"]
shell 形式,command
作为/bin/sh -c
的参数进行执行,即为 shell 的子进程。
ENTRYPOINT command param1 param2
ENTRYPOINT
指令允许您指定容器启动时的启动进程。
VOLUME
VOLUME ["/data"]
VOLUME
指令指定了一个挂载点,并给该挂载点命名,表明该挂载点的数据卷来自于主机的某个目录或者共享了其他容器的目录,该挂载点的内容不会随镜像的分发而分发。
USER
USER daemon
USER
指令设置启动镜像时的用户或者UID
,随后所有在Dockerfile
文件内的RUN
,CMD
以及ENTRYPOINT
指令都将该用户作为执行用户。
WORKDIR
WORKDIR /path/to/workdir
WORKDIR
指令设置工作目录,随后所有在Dockerfile
文件内的RUN
,CMD
以及ENTRYPOINT
指令都将该目录作为当前目录,并执行相应的命令。
最后更新:2016-11-23 16:03:52
上一篇:
构建容器镜像__构建管理_用户指南_容器服务-阿里云
下一篇:
常用 Docker 相关软件下载加速__构建管理_用户指南_容器服务-阿里云
添加思考时间__脚本开发_Lite用户使用手册_性能测试-阿里云
日志级别设置__脚本开发_Lite用户使用手册_性能测试-阿里云
搭数服务协议__相关协议_平台介绍_数加平台介绍-阿里云
取消迁移__数据迁移_API 参考_云数据库 RDS 版-阿里云
新建测试___Lite用户使用手册_性能测试-阿里云
基本参数__图片水印_老版图片服务手册_对象存储 OSS-阿里云
怎样为一个子用户授予只读访问SLB的权限___负载均衡(SLB)授权问题_授权常见问题_访问控制-阿里云
连接实例七要素的获取方法__快速入门_云数据库 MongoDB 版-阿里云
数据库专家现场保障__工作说明书_尊享服务_支持计划-阿里云
Pig 作业配置__作业_用户指南_E-MapReduce-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云