Docker的Dockerfile脚本基本使用指南
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Dockerfile 本质上就是一个自动化的构建脚本。它由一系列命令和参数组成,这些命令层层叠加在一个基础镜像上,最终生成一个全新的镜像。整个过程从 FROM 开始,后面跟着各种配置、安装、拷贝操作,最后输出一个可以直接拿来创建容器的成品。可以说,Dockerfile 让镜像构建变得可重复、可追溯,
Dockerfile 本质上就是一个自动化的构建脚本。它由一系列命令和参数组成,这些命令层层叠加在一个基础镜像上,最终生成一个全新的镜像。整个过程从 FROM 开始,后面跟着各种配置、安装、拷贝操作,最后输出一个可以直接拿来创建容器的成品。可以说,Dockerfile 让镜像构建变得可重复、可追溯,极大简化了部署的复杂度。
Dockerfile 语法
在实操之前,先快速过一遍 Dockerfile 的语法规则,搞清楚它到底长什么样。
什么是语法?简单说,就是告诉计算机“用什么指令、带什么参数”的一套约定。Dockerfile 的语法设计得非常干净、直观,甚至不需要额外文档就能猜个八九不离十——支持注释,指令自解释,结构清晰。如果语法写错了,计算机就直接报错,所以规范是第一位的。
语法示例
Dockerfile 里的内容由两部分组成:注释(用 # 开头)和命令(指令+参数)。
一个最简单的例子:
# Print "Hello docker!"
RUN echo "Hello docker!"
Dockerfile 命令详解
Dockerfile 提供了十几条命令来构建镜像,下面逐一介绍最常用的那些。
FROM
FROM
或
FROM :
这条指令指定基础镜像,后续所有操作都基于它。它必须放在 Dockerfile 的第一行。比如 FROM ubuntu,如果没有指定 tag,默认会取 latest;如果连这个镜像都找不到,构建就会直接失败。
RUN
RUN # shell 格式,默认用 /bin/sh -c 执行
RUN ["executable", "param1", "param2"] # exec 格式
RUN 会在当前镜像中执行命令,并提交执行结果形成新的一层。你可以把它理解为手动执行 docker run image command 后再 docker commit 的合成操作。
注释
用 # 开头,用于解释代码,不参与构建。例如:
# 这是注释
FROM ubuntu
# 更新源
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
MAINTAINER
MAINTAINER
用来标明维护者的姓名和联系方式,算是镜像的“作者标签”。例如:
MAINTAINER Guillaume J. Charmes, guillaume@dotcloud.com
ENTRYPOINT
ENTRYPOINT cmd param1 param2 # shell 格式
ENTRYPOINT ["cmd", "param1", "param2"] # exec 格式
ENTRYPOINT 配置容器启动时要执行的命令。比如:
FROM ubuntu
ENTRYPOINT echo "Welcome!"
# 启动后输出 Welcome!
USER
USER daemon
指定运行后续命令(以及容器启动后的进程)所用的用户。通常配合 ENTRYPOINT 使用,比如让 memcached 以 daemon 用户运行:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE
EXPOSE [...]
暴露容器内的端口,方便外部与其通信。例如 memcached 默认用 11211 端口:
EXPOSE 11211
下面是一个完整的 Memcached 镜像 Dockerfile 示例:
# Memcached
# VERSION 2.2
FROM ubuntu
MAINTAINER Victor Coisne victor.coisne@dotcloud.com
# 更新源(国内建议换成 163 或 sohu 的源,不然太慢)
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
# 安装 memcached
RUN apt-get install -y memcached
# 设置启动命令
ENTRYPOINT ["memcached"]
# 以 daemon 用户运行
USER daemon
# 暴露端口
EXPOSE 11211
实际构建的过程(以 163 源为例):
docker build -t tankywoo - < Dockerfile
# 输出会显示每一步的提交,最终生成镜像
Step 0 : FROM ubuntu
Step 1 : MAINTAINER Victor Coisne ...
...
Successfully built 666c5d65f396
ENV
ENV
设置环境变量,后续的 RUN 命令可以直接使用。生成的容器中也会保留这些变量,通过 docker inspect 可以看到:
"Env": [
"name=tanky",
"HOME=/",
"PATH=/usr/local/sbin:..."
]
也可以在 docker run 时临时覆盖:docker run -i -t --env name="tanky" ubuntu:newtest /bin/bash
ADD
ADD
将构建上下文中的文件或目录复制到容器的目标路径。src 可以是本地相对路径,也可以是远程 URL。dest 必须是容器内的绝对路径。
VOLUME
VOLUME [""]
创建一个挂载点,用于在容器和宿主机之间共享目录。例如 VOLUME ["/data"]。
WORKDIR
WORKDIR /path/to/workdir
设置后续 RUN、CMD、ENTRYPOINT 的执行目录。可以多次使用,如果是相对路径,则基于上一个 WORKDIR。比如:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
# 实际在 /a/b/c 下执行 pwd
CMD
CMD ["executable","param1","param2"] # exec 格式
CMD ["param1","param2"] # 作为 ENTRYPOINT 的默认参数
CMD command param1 param2 # shell 格式
CMD 提供容器启动时的默认命令。一个 Dockerfile 里只能有一个 CMD,如果有多个,只有最后一个会生效。
WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许
Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator
Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。













