Dockerfile文件说明

  文件说明

      此文件用于docker镜像文件的制做python

  基本结构

      Dockerfile文件由行命令组成,以#开头注释行docker

      通常分为四部分,基础镜像信息、维护者信息、镜像操做指令和容器启动执行指令。shell

      例如 数据库

      

#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指令,用于指定运行容器是操做的命令。ruby

  指令

    FORMapp

    格式为 FROM <image> 或者 <image>:<tag>curl

    第一条指令必须为FORM指令,而且若是同一个Dockerfile中建立多个镜像时,能够使用多个FORM指令(每一个镜像一次)post

 

    MAINTAINERui

    格式为 MAINTAINER <name> ,指定维护者信息url

    

    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
相关文章
相关标签/搜索