Dockerfile 中对常用命令详解
说明
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
在Dockerfile 中命令书写对先后顺序及表示其执行对顺序,在书写时需注意。
约定
命令不区分大小写,但是命名约定为全部大写。
常用命令
FROM
所有Dockerfile 都必须以
FROM
命令开始。
FROM
命令会指定镜像基于哪个基础镜像来进行创建,后面对命令也会机会这个镜像来执行。
FROM
命令可以多次使用,表示创建多个镜像。
语法如下:
FROM [images name]
例如:
FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal AS base
WORKDIR
WORKDIR
命令用于指定RUN
、CMD
、ENTRYPOINT
等命令对工作目录。
语法如下:
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"]