Docker(2)——构建镜像命令解析

 我来答
天罗网17
2022-06-29 · TA获得超过6200个赞
知道小有建树答主
回答量:306
采纳率:100%
帮助的人:73.7万
展开全部

Dockerfile 中包括 FROM 、 MAINTAINER 、 RUN 、 CMD 、 EXPOSE 、 ENV 、 ADD 、 COPY 、 ENTRYPOINT 、 VOLUME 、 USER 、 WORKDIR 、 ONBUILD 、 LABEL 等14个指令。

1.FROM
格式: FROM image 或 FROM image:tag
含义:Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令。

docker17.05版本开始,dockerfile中允许使用多个FROM指令,主要是解决编译环境和运行环境分开的问题。 https://www.cnblogs.com/leoyang63/articles/13733967.html

2.MAINTAINER
格式: MAINTAINER user_name user_email
含义:指定维护者信息,作者以及作者的邮箱地址

3.RUN
支持两种格式:
RUN command
RUN ["EXECUTABLE","PARAM1","PARAM2".....]
含义:前者在shell终端中运行命令, /bin/sh -c command ,例如: /bin/sh -c "echo hello" ;后者使用 exec 执行,指定其他运行终端使用 RUN["/bin/bash","-c","echo hello"] 。每条RUN指令将当前的镜像基础上执行指令,并提交为新的镜像,命令较长的时候可以使用 \ 来换行。

4.CMD
支持三种格式:
CMD ["executable","param1","param2"] ,使用exec执行,这是推荐的方式。
CMD command param1 param2 , 在 /bin/sh 中执行。
CMD ["param1","param2"] ,提供给 ENTERYPOINT 的默认参数。

含义: CMD 用于指定容器启动时执行的命令,每个 Dockerfile 只能有一个 CMD 命令,多个 CMD 命令只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉 CMD 中指定的命令。

5.EXPOSE
格式: EXPOSE port [port2,port3,...]
含义:例如 EXPOSE 80 这条指令告诉Docker服务器暴露80端口,供容器外部连接使用。在启动容器的使用使用-P,Docker会自动分配一个端口和转发指定的端口,使用-p可以具体指定使用哪个本地的端口来映射对外开放的端口。

6.ENV
格式: EVN key value
含义:用于指定环境变量,这些环境变量,后续可以被 RUN 指令使用,容器运行起来之后,也可以在容器中获取这些环境变量,例如:
ENV word hello
RUN echo $word

7.ADD
格式: ADD src dest
含义:该命令将复制指定本地目录中的文件到容器中的 dest 中, src 可以是是一个绝对路径,也可以是一个 URL 或一个 tar 文件, tar 文件会自动解压为目录。

8.COPY
格式为: COPY src desc
含义:复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建。

9.ENTRYPOINT
支持两种格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1,param2

含义:后者会在shell中执行。用于配置容器启动后执行的命令,这些命令不能被 docker run 提供的参数覆盖。和 CMD 一样,每个Dockerfile中只能有一个 ENTRYPOINT ,当有多个时最后一个生效。

10.VOLUME
格式: VOLUME ["/data"]
含义:作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。

11.USER
格式: USER username
含义:指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户。要临时使用管理员权限可以使用sudo。在USER命令之前可以使用RUN命令创建需要的用户。
例如: RUN groupadd -r docker && useradd -r -g docker docker

12.WORKDIR
格式: WORKDIR /path
含义:为后续的 RUN CMD ENTRYPOINT 指定配置工作目录,可以使用多个 WORKDIR 指令,若后续指令用得是相对路径,则会基于之前的命令指定路径。

13.ONBUILD
格式: ONBUILD [INSTRUCTION]
含义:该配置指定当所创建的镜像作为其他新建镜像的基础镜像时所执行的指令,例如下面的Dockerfile创建了镜像A:
ONBUILD ADD . /app
ONBUILD RUN python app.py

基于镜像A创建新的镜像时,新的Dockerfile中使用 from A 指定基镜像时,会自动执行 ONBBUILD 指令内容,等价于在新的要构建镜像的Dockerfile中增加了两条指令:
FROM A
ADD ./app
RUN python app.py

14.LABEL
格式: LABEL <label_name>="<label_value>"
含义:用来给镜像以键值对的形式添加一些元数据(metadata),如明镜像的作者、文档地址,commit ID。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
快又稳
2024-10-28 广告
广州快又稳网络科技有限公司是一家集技术研发、产品创新、服务优化于一体的高新技术企业。公司自成立以来,始终秉承“网络使人类缩进距离,我们让网络快又稳”的核心理念,致力于为全球客户提供高效、安全、易用的互联网解决方案及信息技术服务。在数字时代,... 点击进入详情页
本回答由快又稳提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式