• 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

        

  • 相关阅读:
    单一职责原则
    23种设计模式
    微信小程序页面跳转
    【论文阅读】OrigamiNet:Weakly-Supervised, Segmentation-Free, One-Step, Full Page Text Recognition by learning to unfold
    【华为昇腾】DB_ResNet精度调优 Siammask性能调优 模型众筹项目复盘
    Ueditor 防止html过滤标签的操作
    海康摄像机rtsp地址格式官方最新版(2020)
    HLS协议解析
    解决帝国标题颜色颜色单引号问题
    帝国CMS动态页支持栏目导航标签,万能标签,循环子栏目标签
  • 原文地址:https://www.cnblogs.com/LandWind/p/docker-param.html
Copyright © 2020-2023  润新知