Docker--Dockerfile引用及指令集的功能用法

本文详细介绍了Dockerfile的使用方法及最佳实践,包括如何构建Docker镜像、Dockerfile的指令集及其功能用法等。

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

Dockerfile引用的官网文档: https://docs.docker.com/engine/reference/builder/
编写Dockerfiles的最佳实践的官网文档: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
Docker可以通过阅读来自的指令自动构建图像  Dockerfile Dockerfile 是一个文本文档,其中包含用户可以在命令行上调用以组合图像的所有命令。使用 docker build  用户可以创建一个连续执行多个命令行指令的自动构建。
用法
docker build 命令 Dockerfile 根据 上下文 构建图像。构建的上下文是指定位置 PATH 或的文件集 URL 。这 PATH 是本地文件系统上的目录。这 URL 是一个Git存储库位置。
递归处理上下文。因此,a  PATH 包括所有子目录, URL 包括存储库及其子模块。此示例显示使用当前目录作为上下文的构建命令:
例如: docker build -f ./Dockerfile -t microsoft/dotnet:v1 . (别忘记了后面有个点,详细了解docker build用法)
构建由Docker守护程序运行,而不是由CLI运行。构建过程所做的第一件事是将整个上下文(递归地)发送到守护进程。在大多数情况下,最好以空目录作为上下文,并将Dockerfile保存在该目录中。仅添加构建Dockerfile所需的文件。
警告 :不要用你的根目录下, / 作为 PATH 因为它会导致生成到您的硬盘驱动器的全部内容传输到码头工人守护进程。
要在构建上下文中使用文件,请 Dockerfile 引用指令中指定的文件,例如 COPY 指令。要提高构建的性能,请通过向 .dockerignore 上下文目录添加文件来排除文件和目录。有关如何 创建.dockerignore 文件的信息, 请参阅此页面上的文档。
传统上,它 Dockerfile 被调用 Dockerfile 并位于上下文的根中。您可以使用 -f 标志 docker build 来指向文件系统中任何位置的Dockerfile。
附菜鸟教程对docker build命令参数的用法 http://www.runoob.com/docker/docker-build-command.html
指令集的功能用法
Dockerfile有十几条命令可用于构建镜像
Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
指令
说明
FROM
指定所创建镜像的基础镜像 ,FROM 指令必须指定且需要写在其他指令之前 .
如果本地镜像不存在 , 会去 Docker Hub 下载指定镜像 ,Dockerfile 创建多个镜像使用多条 FROM 语句 .
支持三种格式 :
FROM <image>  FROM <image>:<tag>  FROM <image>@<digest>
示例 :
FROM microsoft/dotnet:2.2-aspnetcore-runtime
RUN
执行命令 , 是启动容器时才指定运行的指令
RUN 有两种形式:
1.RUN <command> shell 表单,该命令在 shell 中运行,默认情况下 /bin/sh -c Linux cmd /S /CWindows 上运行)
2.RUN ["executable", "param1", "param2"] (执行形式)
示例 :
RUN echo "hello world"
CMD
指定启动容器默认执行的命令
每个 Dodckerfile 只能有一条 CMD 命令,如果指定了多条命令,只有最后一条会被执行
CMD 有三种形式 :
CMD ["executable","param1","param2"] (执行形式,这是首选形式)
CMD ["param1","param2"] (作为 ENTRYPOINT 的默认参数)
CMD command param1 param2 (在 Shell 中使用)
示例 : CMD [ "dotnet","XXX.dll" ]
LABEL
指定生成镜像的元数据标签信息
格式 : LABEL <KEY>=<VALUE>
示例 : LABEL version=”1.0”
MAINTAINER
指定维护者信息 ( 已过时 ) ,格式为 MAINTAINER name
建议使用 LABEL 代替 , 例如 :LABEL maintainer=”cxt@docker.com”
EXPOSE
声明镜像内服务所监听的端口
示例 :EXPOSE 80
ENV
指定环境变量 , 环境变量可以在后续 RUN 指令中使用
格式 : ENV <key> <value>
示例 : ENV JAVA_HOME /path/to/java
ADD
ADD 指令用于复制文件 , 复制指定的 <src> 路径下的内容到容器中的 <dest> 路径下 ,<src> 可以为 URL; 如果为 tar 文件,会自动解压到 <dest> 路径下
格式 : ADD <src>... <dest>
COPY
复制本地主机的 <src> 路径下的内容到镜像中的 <dest> 路径下 ;COPY 指令和 ADD 指令类似 ,COPY 不支持 URL 和压缩包一般情况下推荐使用 COPY, 而不是 ADD
格式 : COPY <src>... <dest>
示例 :COPY nginx.conf /etc/nginx/nginx.conf
ENTRYPOINT
指定镜像的默认入口
ENTRYPOINT CMD 指令的目的一样,都是指定 Docker 容器启动时执行的命令,可多次设置,但只有最后一个有效
格式 : ENTRYPOINT ["executable", "param1", "param2"]
WORKDIR
WORKDIR 指令可以在创建容器时在容器内部指定一个工作目录
例如 : WORKDIR /data
 
Dockerfile示例;
FROM microsoft/dotnet:2.2-aspnetcore-runtime
LABEL version = "1.0"
RUN mkdir /data
COPY ./ /data
WORKDIR /data
EXPOSE 80
CMD [ "dotnet","Docker.dll" ]

转载于:https://www.cnblogs.com/cxt618/p/10518091.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值