dockerfile指令祥解

(1)FROM
FROM <imageName>
FROM <imageName>:<tag>

imageName必须是已存在的镜像。
FROM必须是第一条非注释的指令。

(2)MAINTAINER
MAINTAINER <name>

指定镜像的作者信息,包含镜像的所有者和联系信息

(3)RUN

指定当前镜像中运行的命令

RUN <command> (shell 模式)
//RUN echo hello
RUN ["executable", "param1", "param2"] (exec模式)
//RUN ["/bin/bash", "-c", "echo hello"]
(4)EXPOSE

指定运行时给镜像的容器使用的端口,可以指定一个或多个

EXPOSE <port>[<port>...]

dockerfile中使用EXPOSE指定的端口,告诉docker该容器中的应用程序会使用特定的端口,但是出于安全,docker并不会自动打开端口,需要在使用时,在启动容器的run命令中使用-p添加对端口的映射指令。

(5)CMD
CMD <command> (shell 模式)
//CMD echo hello
CMD ["executable", "param1", "param2"] (exec模式)
//CMD ["/bin/bash", "-c", "echo hello"]
CMD ["param1", "param2"](作为ENTRYPOINT指令的默认参数)

和RUN指令相同的是,CMD也是指定一个运行俄命令。

不同的是,RUN指定的命令是在容器构建的时候运行的,CMD指定的指令是在容器运行时候执行的。

如果使用命令行的docker run命令后面带有命令(如:/bin/bash),此命令将会覆盖CMD指定的命令,使得CMD命令不会执行,而不会覆盖RUN指定的命令。

(6)ENTRYPOINT
ENTRYPOINT <command> (shell 模式)
//ENTRYPOINT echo hello
ENTRYPOINT ["executable", "param1", "param2"] (exec模式)
//ENTRYPOINT ["/bin/bash", "-c", "echo hello"]

ENTRYPOINT和CMD不同之处在于,ENTRYPOINT指定的命令不会被docker run指定的命令所覆盖(执行ENTRYPOINT命令,docker run指定的命令不会执行),如果想被覆盖,可以使用docker run --entrypoint选项。

ENTRYPOINT和CMD组合使用:

使用ENTRYPOINT指定命令,使用CMD指定命令默认的参数。这样使用,在运行docker run时候,只需要使用指定的参数去覆盖CMD指定的默认参数即可。

(7)ADD和COPY

将文件或目录复制到dockerfile构建的镜像中。

ADD <src>... <dest>
ADD ["<src>".. "<dest>"] :适用于文件路径中有空格的情况 

COPY <src>... <dest>
COPY ["<src>".. "<dest>"] :适用于文件路径中有空格的情况 

src:来源可以是本地地址,也可以是远程的URL。如果是本地地址,必须是构建目录中的想对地址。远程的URL不推荐使用。

dest:目标路径,需要指定镜像中的绝对路径。

ADD和COPY区别:

ADD包含类似于tar的解压功能,如果是单纯复制文本,docker推荐使用copy。

(8)VOLUME
VOLUME ["/data"]

用来向基于镜像创建的容器添加卷,一个卷可以是存在于一个或多个容器的特定目录,这个目录可以绕过联合文件系统并提供如共享数据、对数据持久化的功能。

(9)WORKDIR

当从镜像创建新容器时,在容器中创建工作目录。ENTRYPOINT和CMD指定的命令将会在这个目录下执行。

通常使用绝对路径。如果使用想对路径,路径将会一直向下传递。

WORKDIR /path/to/workdor
(10)ENV

用于设置环境变量,构建过程和运行过程同样有效。

ENV <key> <value>
ENV <key>=<value> ...
(11)USER

指定镜像会以什么样的用户去运行。不指定的情况下会默认root用户。

//启动的容器将会以uid用户的身份去运行
USER uid
USER uid:gid
(12)ONBUILD

为镜像添加触发器。当一个镜像被用作其他镜像的基础镜像时,这个触发器会被执行。当子镜像在构建时会插入触发器指令。

ONBUILD [INSTRUCTION]

如:dockerfileA文件中有ONBUILD指令。我们首先使用dockerfileA构建镜像images1,此时ONBUILD指定的指令不会执行。在images1启动的容器中将无法看到ONBUILD的执行结果。

此时我们使用images1为基础镜像创建dockerfileB文件,并使用dockerfileB构建镜像images2,此时dockerfileA中ONBUILD指定的指令将会执行。在images2启动的容器中将无法看到ONBUILD的执行结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值