Dockerfile 常用指令
2025-02-06 19:43:44 0 举报
AI智能生成
Dockerfile是文本文件,包含一组指令和参数,用于构建Docker镜像。核心指令包括`FROM`用于设定基础镜像;`RUN`执行命令;`COPY`复制本地文件到镜像;`ADD`更高级,可解压并从URL复制;`CMD`指定容器启动时运行的命令;`ENTRYPOINT`配置容器启动命令且可以被`docker run`命令覆盖;`ENV`设置环境变量;`EXPOSE`声明端口,用于文档说明;`VOLUME`定义容器数据卷;以及`WORKDIR`改变工作目录。修饰语涵盖像`ARG`设置构建参数;`LABEL`添加镜像元数据;`STOPSIGNAL`指定容器停止信号。通过层叠使用这些指令,开发者能自定义精简、高效的镜像。
作者其他创作
大纲/内容
FROM
作用
指定基础镜像
格式
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
说明
FROM 指令有点像 Java 里面的 extends 关键字
FROM 指令必须指定且需要卸载其他指令前面
FROM 指令后的所有指令都依赖于该指令所指定的镜像
示例
LABEL
作用
为镜像添加元数据
格式
LABEL <key>=<value> <key>=<value> <key>=<value> ...
说明
使用 " 和 \ 转换命令行
示例
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="this is illustrates \
that label-values can span multiple lines."
that label-values can span multiple lines."
MAINTAINER
作用
指定维护者的信息,用于为 Dockerfile 署名
格式
MAINTAINER <name>
说明
示例
MAINTAINER haha<haha@163.com>
RUN
作用
执行命令
格式
RUN <command>
RUN ["executable", "param1", "param2"]
说明
RUN <command> 在 shell 终端中运行,在 Linux 中默认是 /bin/sh -c,在 Windows 中是 cmd /s /c ,使用这种格式,就像直接在命令行中输入命令一样
RUN ["executable", "param1", "param2"] 使用 exec 执行,这种方式类似于函数调用
指定其他终端可以通过该方式操作,例如 RUN ["/bin/bash", "-c", echo hello"],该方式必须使用双引号而不能使用单引号,因为该方式会被转换成一个 JSON 数组
示例
USER
作用
设置用户与
格式
USER 用户名
说明
设置启动镜像时的用户或者 UID,写在该指令后的 RUN、CMD 以及 ENTRYPOINT 指令都将使用该用户执行命令
示例
USER daemon
VOLUME
作用
指定挂载点
格式
VOLUME ["/data"]
说明
使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器
当容器中的应用有持久化数据的需求时可以在 Dockerfile 中使用该指令
示例
VOLUME /data
WORKDIR
作用
指定工作目录
格式
WORKDIR /path/to/workdir
说明
切换目录指定,类似于 cd 命令,写在该指令后的 RUN、CMD 以及 ENTRYPOINT 指令都将该目录作为当前目录,并执行相应的命令
示例
其他
STOPSIGNAL
HEALTHCHECK
SHELL
文档
Dockerfile reference
https://docs.docker.com/reference/dockerfile/
Building best practices
https://docs.docker.com/build/building/best-practices/#build-cache
ADD
作用
复制文件
格式
ADD <src> ... <dest>
ADD ["src", ... "<dest>"]
说明
从 src 目录复制文件到容器 dest,其中 src 可以时 Dockerfile 所在目录的相对路径,也可以时一个 URL,还可以是一个压缩包
src 必须在构建的上下文内,不能使用例如 ADD ../something /something 这样的命令,因为 docker build 命令首先会将上下文路径和其子目录发送到 docker daemon
如果 src 是一个 URL,同时 dest 不以斜杠结尾,dest 将被视为文件,src 对应内容文件将被下载到 dest
如果 src 是一个 URL,同时 dest 以斜杠结尾,dest 将被视为目录,src 对应内容将被下载到 dest 目录
如果 src 是一个目录,那么整个目录下的内容将被复制,包括文件系统元数据
如果文件是可识别的压缩包格式,则 docker 会自动解压
示例
ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
ARG
作用
设置构建参数
格式
ARG <name>[=<default value>]
说明
类似于 ENV,和 ENV 不同的是,ARG 设置的是构建是的环境变量,在容器运行时是不会存在这些变量的
示例
ARG user1=someuser
CMD
作用
用于为执行容器提供默认值
格式
CMD ["executable", "param1", "param2"]
推荐使用
CMD ["param1", "param2"]
为 ENTRYPOINT 指令提供预设参数
CMD command param1 param2
在 shell 中执行
说明
用于为执行容器提供默认值
每个 Dockerfile 只有一个 CMD 命令,如果指定了多个 CMD 命令,那么只有最后一条会被执行,如果启动容器时指定了运行的命令,则会覆盖 CMD 命令
示例
CMD echo "this is a test" | wc -
COPY
作用
复制文件
格式
COPY <src> ... <dest>
COPY ["<src>", ... "<dest>"]
说明
复制本地端的 src 到容器的 dest
COPY 指令和 ADD 指令类似,COPY 不支持 URL 和压缩包
示例
ENTRYPOINT
作用
入口点
格式
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
说明
ENTRYPOINT 和 CMD 指令的目的一样,都是指定 Docker 容器启动时执行的命令,可多次设置,但只有最后一个有效
示例
ENV
作用
设置环境变量
格式
ENV <key> <value>
ENV <key>=<value>
说明
示例
ENV JAVA_HOME /path/to/java
EXPOSE
作用
声明暴露的端口
用于声明在运行时容器提供服务的端口
格式
EXPOSE <port> [<port> ...]
说明
这只是一个声明,运行时并不会因为该声明就打开相应的端口
该指令的作用主要是帮助镜像使用者理解该镜像服务的守护端口
其次是当运行时使用随机映射时,会自动映射 EXPOSE 的端口
示例
# 声明暴露一个端口
EXPOSE port1
# 相应的运行容器使用的命令
docker run -p port1 image
# 也可使用 -P 选项启动
docker run -P image
# 声明暴露多个端口示例
EXPOSE port1 port2 port3
# 相应的运行容器使用的命令
docker run -p port1 -p port2 -p port3 image
# 也可指定需要映射到宿主机器上的端口号
docker run -p host_oprt1:port1 -p host_port2:port2 -p host_port3:port3 image
EXPOSE port1
# 相应的运行容器使用的命令
docker run -p port1 image
# 也可使用 -P 选项启动
docker run -P image
# 声明暴露多个端口示例
EXPOSE port1 port2 port3
# 相应的运行容器使用的命令
docker run -p port1 -p port2 -p port3 image
# 也可指定需要映射到宿主机器上的端口号
docker run -p host_oprt1:port1 -p host_port2:port2 -p host_port3:port3 image
0 条评论
下一页