dockerfile


基本结构

Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义镜像。

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。

Docker分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时默认要执行的指令

指令

FROM

FROM :定制的镜像都是基于 FROM 的镜像(FROM必须是Docker非空开头的第一行)

语法:
FROM <基础镜像>

LABEL MAINTAINER

指定维护者信息

语法:
LABEL MAINTAINER [作者] [邮箱]

RUN

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

//shell 格式
语法:
RUN <命令行的命令>
# <命令行的命令> 等同于,在终端操作的 shell 命令
//exec 格式
语法: 
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

CDM

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

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

CMD支持三种格式:
语法: 
CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

EXPOSE

暴露容器的端口

在启动容器时通过-P,Docker主机会自动分配一个端口转发到指定的端口

语法:
EXPOSE <端口1> [<端口2>...]

ENV

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

语法:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

ADD

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

语法:
ADD <src> <dest>

COPY

复制本地主机的(为Dockerfile所在目录的相对路径,文件或目录)为容器中的。目标路径不存在时会自动创建。
当使用本地目录为源目录时,推荐使用COPY

语法:
COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效

语法:
ENTRYPOINT <shell 命令>
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

VOLUME

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

语法:
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

USER

用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)

语法:
USER <用户名>[:<用户组>]

WORKDIR

为后续的RUN、CMD、ENTRYPOINT指令配置工作目录
可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径

WORKDIR <工作目录路径>
posted @   世界的尽头*  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示