千家信息网

Dockerfile指令与基本结构的讲解

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,使用 Dockerfile 可以允许用户创建自定义的镜像。基本结构Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。 一般的,Dockerfile 分为四部分:基础镜像信息、维
千家信息网最后更新 2026年11月02日Dockerfile指令与基本结构的讲解

使用 Dockerfile 可以允许用户创建自定义的镜像。

基本结构

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。 一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

例如:

// 基础镜像信息FROM daocloud.io/node:7 // 维护者信息MAINTAINER abel.yang <527515025@qq.com>LABEL Descripttion="This image is build for web"//镜像操作指令RUN mkdir -p /opt/apps/eppCOPY . /opt/apps/eppWORKDIR /opt/apps/epp/epp-web/serverENV LANG C.UTF-8ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezoneEXPOSE 3001//容器启动时执行指令CMD [ "npm", "start" ]

其中,一开始必须指明所基于的镜像名称,接下来推荐说明维护者信息。 后面则是镜像操作指令,例如 RUN 指令, RUN 指令将对镜像执行跟随的命令。

每运行一条 RUN 指令,镜像添加新的一层,并提交。 最后是 CMD 指令,来指定运行容器时的操作命令。

指令

INSTRUCTION arguments,指令包括 FROM、MAINTAINER、RUN 等

格式为 FROM 或FROM :。

第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)。

MAINTAINER

格式为 MAINTAINER ,指定维护者信息。

RUN

格式为 RUN 或 RUN ["executable", "param1", "param2"]。

前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。

每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换行。

CMD

支持三种格式

  • CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
  • CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
  • CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。

如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

EXPOSE

格式为 EXPOSE [...]。

告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。

ENV

格式为 ENV 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。

ADD

格式为 ADD 。
该命令将复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。

COPY

格式为 COPY 。
复制本地主机的 (为 Dockerfile 所在目录的相对路径)到容器中的 。

当使用本地目录为源目录时,推荐使用 COPY。

ENTRYPOINT

两种格式:

  • ENTRYPOINT ["executable", "param1", "param2"]
  • ENTRYPOINT command param1 param2(shell中执行)。

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。

每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

VOLUME

格式为 VOLUME ["/data"]。

创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

USER

格式为 USER daemon。

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。

当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。

WORKDIR

格式为 WORKDIR /path/to/workdir。

为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。

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

WORKDIR /a WORKDIR b WORKDIR c RUN pwd 则最终路径为 /a/b/c。

ONBUILD

格式为 ONBUILD [INSTRUCTION]。

配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。

例如,Dockerfile 使用如下的内容创建了镜像 image-A。

[...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]

如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行 ONBUILD 指令内容,等价于在后面添加了两条指令。

FROM image-A

#Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src

使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。

创建镜像

编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像。

docker build -t 镜像名字 .// 注意 . 不能忘。

下面两个Dockerhub上的Dockerfile的例子。

# Nginx## VERSION 0.0.1FROM ubuntuMAINTAINER Victor Vieux RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server# 在ubuntu的父镜像基础上安装inotify-tools,nginx,apache2,openssh-server,从而创建一个新的Nginx镜像。
# Firefox over VNC##VERSION 0.3FROM ubuntu# Install vnc,xvfb in order to create a 'fake' display and firefoxRUN apt-get update && apt-get install -y x11vnc firefoxRUN mkdir /.vnc# Setup a psswordRUN x11vnc -storepasswd 1234 ~/.vnc/passwd#Autostart firefoxRUN bash -c 'echo "firefox" >> /.bashrc'EXPOSE 5900CMD ["x11vnc", "-forever", "-usepw", "-create"]# 基于ubuntu父镜像,安装firefox和vnc软件,启动后,用户可以通过5900端口通过vnc方式使用firefox。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

镜像 指令 命令 容器 格式 用户 运行 信息 基础 内容 目录 路径 推荐 可以通过 多个 维护者 主机 参数 方式 端口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 互联网科技产业 金融科技创新监管互联网金融 远信互联网科技 猫创互联网科技 成都狮子座互联网科技 互联网科技股有哪些 顺网科技2021年互联网排名 江苏南京365互联网科技 湖南诚度互联网科技有限公司 互联网公司科技股 昭通互联网科技选哪家 如何创新互联网科技 乌鲁木齐新华智原互联网科技学校 长沙茂晟互联网科技有限公司 黑科技 体验场景 互联网大会 扫呗互联网科技有限公司 科技互联网行业投资研究 互联网的科技体现在哪里 互联网科技创新方面的资料 互联网科技保险 佰商互联网科技有限公司 来此购互联网科技有限公司 中国航天科技大学国际工业互联网 华夏恒生互联网科技013171 互联网在线教育科技创业 徐州市互联网科技有限公司 无锡工业互联网科技有限公司 互联网相关科技技术 科技互联网公司两年变化
0