Dockerfile指令介绍

原创
2018/09/20 11:37
阅读数 251

Dockerfile指令介绍

一、简介

1.Dockerfile格式

Dockerfile中指令不区分大小写。但是,最好为大写的,以便更容易地将它们与参数区分开。 Dockerfile是按顺序运行指令,一个Dockerfile 必须用FROM指令启动。该FROM指令指的是构建的基本映像。

Dockerfile中支持转义字符“\” ,也支持设置环境变量。

环境变量(与声明的ENV声明),也可以在特定指令作为变量用来被解释 Dockerfile。还会处理转义,以便将类似变量的语法包含在字面上。

环境变量Dockerfile用 $variable_nameor表示${variable_name}。它们被等效地处理,并且括号语法通常用于解决具有没有空格的变量名称的问题,例如${foo}_bar。

该${variable_name}语法还支持一些标准的bash 修饰如下规定:

${variable:-word}表示if variable设置后,结果将是该值。如果variable未设置则word结果将是。 ${variable:+word}表示如果variable设置,那么word将是结果,否则结果是空字符串。 在所有情况下,word可以是任何字符串,包括其他环境变量。

通过\在变量之前添加a来实现转义:$foo或者${foo},例如,将分别转换为$foo和${foo}文本。

2. 以下指令列表支持环境变量Dockerfile:

ADD
COPY
ENV
EXPOSE
FROM
LABEL
STOPSIGNAL
USER
VOLUME
WORKDIR
以及:
ONBUILD (当与上面支持的指令之一结合使用时)

注意:在1.4之前,ONBUILD指令不支持环境变量,即使与上面列出的任何指令结合使用也是如此。

二、指令介绍

1.FROM

该FROM指令初始化新的构建阶段并为后续指令设置基本映像。因此,有效Dockerfile必须以FROM指令开始。

格式:FROM <image> [AS <name>] 或者 FROM <image>[:<tag>] [AS <name>]

image:可以是任何有效图像 
tag:值是可选的。如果省略其中任何一个,则构建器默认采用latest标记。如果找不到tag值,构建器将返回错误。

例如:FROM tomcat
默认为tomcat最新版本

2.ARG

ARG指令用以定义构建时需要的参数,在docker build命令中以--build-arg a_name=a_value形式赋值。 不建议在构建的过程中,以参数的形式传递信息。

格式:ANG <name>

例如:ARG a_name
a_name是在执行build指令传的参数

3.RUN

RUN指令是创建image的步骤执行的, 一个Dockerfile中可以有许多个RUN命令。

格式:
	RUN <command>(该命令在shell中运行,默认情况下 linux上运行/bin/sh -c 或  Windows 上运行cmd /S /C)
	RUN ["executable", "param1", "param2"] (使用exec执行,exec 格式是json 所以用",不要使用')

例如:RUN /bin/bash -c 'echo $HOME' 与 RUN ["/bin/bash", "-c", "echo hello"] 执行结果相同

4.CMD

CMD命令是当Docker镜像被启动后Docker容器将会默认执行的命令。一个Dockerfile中只能有一个CMD命令。如果Dockerfile中存在多条CMD,只有最后一条CMD生效。

格式:
	CMD ["executable","param1","param2"](执行形式,推荐使用)
	CMD ["param1","param2"]
	CMD command param1 param2

5.MAINTAINER

已经弃用,该指令是设置镜像的作者信息。

6.ENV

ENV是设置容器中环境变量使用。

格式:
	ENV <key> <value> (推荐)
	ENV <key>=<value> ...
例如:
	ENV TZ=Asia/Shanghai  或  ENV TZ Asia/Shanghai 设置容器的时区

7.COPY

COPY仅用于构建Linux容器的Dockerfiles,并且不适用于Windows容器,该指令是把宿主机的文件复制到容器中。

格式:
	COPY [--chown=<user>:<group>] <src>... <dest>
	COPY [--chown=<user>:<group>] ["<src>",... "<dest>"] (包含空格的路径写该指令)

例如:COPY imanager.war  /usr/local/tomcat/webapps 把imanager.war 复制到容器中/usr/local/tomcat/webapps目录下

8.EXPOSE

EXPOSE指令通知Docker容器在运行时监听指定的端口。可以指定端口是TCP还是UDP,如果未指定协议,则默认为TCP。 该指令实际上没有发布端口,它是用于发布要发布的端口,实际端口在docker run -p中发布。

格式:
	EXPOSE <port> [<port>/<protocol>...]

例如:EXPOSE 80/udp 发布UDP 80端口

---- 持续更新....

9.LABEL

10.ADD

11.ENTRYPOINT

12.VOLUME

13.USER

14.WORKDIR

15.ONBUILD

16.STOPSIGNAL

17.SHELL

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部