Dockerfile文件说明
文件说明
此文件用于docker镜像文件的制作
基本结构
Dockerfile文件由行命令组成,以#开头注释行
一般分为四部分,基础镜像信息、维护者信息、镜像操作指令和容器启动执行指令。
例如
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed. #For more information, please see https://aka.ms/containercompat FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-nanoserver-1903 AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1903 AS build WORKDIR /src COPY ["WebApiDemo/WebApiDemo.csproj", "WebApiDemo/"] RUN dotnet restore "WebApiDemo/WebApiDemo.csproj" COPY . . WORKDIR "/src/WebApiDemo" RUN dotnet build "WebApiDemo.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "WebApiDemo.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "WebApiDemo.dll"]
开始指明基于的镜像说明,下面推荐说明维护者信息,后面是镜像操作指令,最后是CMD指令,用于指定运行容器是操作的命令。
指令
FORM
格式为 FROM <image> 或者 <image>:<tag>
第一条指令必须为FORM指令,并且如果同一个Dockerfile中创建多个镜像时,可以使用多个FORM指令(每个镜像一次)
MAINTAINER
格式为 MAINTAINER <name> ,指定维护者信息
RUN
格式为 RUN <command> 或者 RUN ["executable","param1","param2"]
前者在shell终端中运行命令,后者则使用exec运行。
指定使用其他终端可以通过第二种方式实现。
每条RUN指令在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时候可以使用 \ 换行。
CMD
支持三种格式:
-
- CMD ["executable","param1","param2"] 使用exec执行,推荐方式
- CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用
- CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数
每个Dockerfile只能有一条CMD命令,如果指定多条命令,则只有最后一条会被执行
如果用户启动容器的时候指定了运行的命令,则会覆盖CMD指定命令
EXPOSE
指定暴漏的端口号,格式为 EXPOSE <port> [<port>... ]
-P ,自动分配随机端口
-p ,指定端口
ENV
格式为 ENV <key> <value> 。指定一个环境变量,后续RUN指令会用到,并在容器运行时保持。
例如:
ENV PG_MAJOR 9.3 ENV PG_VERSION 9.3.4 RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && … ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
ADD
格式为 ADD <src> <dest>
该命令复制指定的 <src> 到容器中 <dest> ,其中 <src> 可以是Dockerfile所在目录的一个相对的路径;也可以是URL;还可以是tar文件(自动解压为目录)
COPY
格式为 COPY <src> <dest>
复制本地的 <src>(为dockerfile所在的相对目录) 到 到容器中的 <dest>
ENTRYPOINT
两种格式:
-
- ENTRYPOINT ["executable","param1","param2"]
- ENTRYPOINT command parma1 param2
配置容器启动后执行的命令,且不可被docker run 提供的参数所覆盖
每个Dockerfile中只能有一个 ENTRYPOINT,当指定多个时只对最后一个有效
VOLUME
格式为 VOLUME ["/data"]
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据库
USER
格式为 USER daemon
指定运行容器时的用户名和UID,后续的 RUN 也会指定用户
WORKDIR
格式为 WORKDIR /path/to/workdir
为后续的 RUN、CMD、ENTRYPOINT 的指令配置工作目录
可以使用多个 WORKDIR 指令,后续指令如果是相对路径,则会基于之前的命令指定的路径
e.g.最终路径为 /a/b/c ,可以简单理解为多次CD指令
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
ONBUILD
格式为 ONBUILD [INSTRUCTION]
配置当前所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令
推荐使用该指令时在标签中注明,如:ruby:1.9-onbuild
e.g.Dockerfile使用如下的内容创建镜像 image-A
[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]
如果基于image-A创建新的镜像时候,新Dockerfile中使用 FORM image-A 指定基础镜像时,会自动执行 ONBUILD的指令内容,等价于在后面添加了两条指令
FROM image-A
#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
作者: LandWind
出处:https://www.cnblogs.com/LandWind/p/docker-param.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】FlashTable:表单开发界的极速跑车,让你的开发效率一路狂飙
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次 ADL 导致的 C++ 代码编译错误
· MySQL查询执行顺序:一张图看懂SQL是如何工作的
· 为什么PostgreSQL不自动缓存执行计划?
· 于是转身独立开发者
· C#.Net筑基-泛型T & 协变逆变
· 精选 10 个 C#/.NET 开发必备开源库!
· Cursor 网页版来了,这下拉屎时也能工作了
· 当我昨天还在为那1000流量欣喜时,今天直接翻10倍
· Deepseek学习笔记
· .NET周刊【6月第4期 2025-06-22】