说明

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
在Dockerfile 中命令书写对先后顺序及表示其执行对顺序,在书写时需注意。

约定

命令不区分大小写,但是命名约定为全部大写。

常用命令

FROM

所有Dockerfile 都必须以 FROM 命令开始。
FROM 命令会指定镜像基于哪个基础镜像来进行创建,后面对命令也会机会这个镜像来执行。
FROM 命令可以多次使用,表示创建多个镜像。
语法如下:

FROM [images name]

例如:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal AS base

WORKDIR

WORKDIR 命令用于指定 RUNCMDENTRYPOINT 等命令对工作目录。
语法如下:

WORKDIR [path]

例如:

WORKDIR /app

EXPOSE

EXPOSE 用于指定容器在运行时监听对端口
语法如下:

EXPOSE [port]

例如:

EXPOSE 8080

COPY

COPY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
语法如下:

COPY [path,newpath]

例如:

COPY src/nuget.config nuget.config

ADD

ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似
在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
语法如下:

ADD [path,newpath]

例如:

ADD src/nuget.config nuget.config

RUN

RUN 在shell或者exec的环境下执行的命令。RUN 指令会在新创建的镜像上添加新的层面,接下来提交的结果用在Dockerfile的下一条指令中。
语法如下:

RUN ["<可执行文件或命令>","<param1>","<param2>",...] 

例如:

-- 还原项目资源包
RUN dotnet restore "HanddayRetail.MallApi/HanddayRetail.MallApi.csproj" --configfile "nuget.config"
-- 构建项目
RUN dotnet build "HanddayRetail.MallApi/HanddayRetail.MallApi.csproj" -c Release -o /app/build

CMD

CMD 类似于 RUN 指令,用于运行程序,CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。,但二者运行的时间点不同:
CMD 在docker run 时运行。
RUN 是在 docker build。

CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["param1","param2"]
CMD command param1 param2

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

ENTRYPOINT

ENTRYPOINT 配置给容器一个可执行的命令,这意味着在每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。同时也意味着该镜像每次被调用时仅能运行指定的应用。
类似于CMD,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前所有的指令,只执行最后的ENTRYPOINT指令。
语法如下:

ENTRYPOINT ["<可执行文件或命令>","<param1>","<param2>",...] 
ENTRYPOINT command param1 param2

例如:

ENTRYPOINT ["dotnet", "HanddayRetail.MallApi.dll"]