Dockerfile 常用指令

本文介绍了Dockerfile的常用指令,包括FROM、LABEL、RUN、ADD、COPY、EXPOSE、ENV、CMD、ENTRYPOINT、WORKDIR、VOLUME等,详细解释了它们的作用和用法,帮助读者理解如何构建Docker镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dockerfile 常用指令

Dockerfile 作为构建镜像的常见方式,其相关命令便显得尤为重要。
Dockerfile通过文本文件构建镜像,文本内包含了一条条构建镜像所需的指令和说明。

1. FROM

语法: FROM <image>:<tag>
例:	FROM centos:7

指明新镜像来源的基础镜像,如果没有选择tag,默认为 latest。
如果以空镜像为模板,则 :FROM scratch 。

2. MAINTAINER (deprecated)

语法: MAINTAINER <name>
例:MAINTAINER xxxx <xxxx@126.com>

指明镜像的作者及联系方式,已过时。推荐使用 LABEL。

3. LABEL

语法: LABEL <key>=<value> <key>=<value> <key>=<value> ...
例:LABEL maintainer="xxxx.com"

为镜像指定标签。也可用来指定镜像作者。

4. RUN

语法: RUN <command>
例:RUN mkdir -p /usr/local/java

构建镜像时运行的 Shell 命令,
比如构建的新镜像中我们想在 /usr/local 目录下创建一个 java 目录。

5. ADD

语法: ADD <src>... <dest>
例:ADD jdk-11.0.6_linux-x64_bin.tar.gz /usr/local/java

拷贝文件或目录到镜像中。会自动下载和解压。

6. COPY

语法: COPY <src>... <dest>
例:COPY jdk-11.0.6_linux-x64_bin.tar.gz /usr/local/java

拷贝文件或目录到镜像中。用法同 ADD,只是不支持自动下载和解压。

7. EXPOSE

语法: EXPOSE <port> [<port>/<protocol>...]
例:EXPOSE 80 443 8080/tcp

暴露容器运行时的监听端口给外部,可以指定端口是监听 TCP 还是 UDP,如果未指定协议,则默认
为 TCP。

如果想使得容器与宿主机的端口有映射关系,必须在容器启动的时候加上 -P 参数。

8. ENV

语法: ENV <key> <value> 添加单个 
 	  ENV <key>=<value> ... 添加多个
例:ENV JAVA_HOME /usr/local/java/jdk-11.0.6/

设置容器内环境变量

9. CMD

语法:
CMD ["executable","param1","param2"] ,例: CMD["/usr/local/tomcat/bin/catalina.sh", "run"]
CMD ["param1","param2"] ,例: CMD [ "echo", "$JAVA_HOME" ] 
CMD commandparam1 param2 ,例: CMD echo $JAVA_HOME

启动容器时执行的 Shell 命令。在 Dockerfile 中只能有一条 CMD 指令。如果设置了多条 CMD,只有最后一条 CMD 会生效。

如果创建容器的时候指定了命令,则 CMD 命令会被替代。

10. ENTRYPOINT

语法:
ENTRYPOINT ["executable", "param1", "param2"] ,例: ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh", "run"] 
ENTRYPOINT command param1 param2 ,例: ENTRYPOINT ehco $JAVA_HOME

启动容器时执行的 Shell 命令,同 CMD 类似,不会被 docker run 命令行指定的参数所覆盖。在Dockerfile 中只能有一条 ENTRYPOINT 指令。如果设置了多条 ENTRYPOINT,只有最后一条 ENTRYPOINT会生效。

如果在 Dockerfile 中同时写了 ENTRYPOINT 和 CMD,并且 CMD 指令不是一个完整的可执行命令,那么 CMD 指定的内容将会作为 ENTRYPOINT 的参数;
如果在 Dockerfile 中同时写了 ENTRYPOINT 和 CMD,并且 CMD 是一个完整的指令,那么它两会互相覆盖,谁在最后谁生效

11. WORKDIR

语法: WORKDIR /path/to/workdir
例:WORKDIR /usr/local

为 RUN、CMD、ENTRYPOINT 以及 COPY 和 AND 设置工作目录。

12. VOLUME

# 容器的 /var/lib/mysql 目录会在运行时自动挂载为匿名卷,匿名卷在宿主机的 /var/lib/docker/volumes 目录下 
VOLUME ["/var/lib/mysql"]

指定容器挂载点到宿主机自动生成的目录或其他容器。一般的使用场景为需要持久化存储数据时。

一般不会在 Dockerfile 中用到,更常见的还是在 docker run 的时候通过 -v 指定数据卷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值