• Docker 第七章 Dockerfile 详解


    [root@localhost Docker_iamge]# docker build --help
    
    Usage:	docker build [OPTIONS] PATH | URL | -
    
    Build an image from a Dockerfile
    
    Options:
          --add-host list           Add a custom host-to-IP mapping (host:ip)
          --build-arg list          Set build-time variables
          --cache-from strings      Images to consider as cache sources
          --cgroup-parent string    Optional parent cgroup for the container
          --compress                Compress the build context using gzip
          --cpu-period int          Limit the CPU CFS (Completely Fair Scheduler) period
          --cpu-quota int           Limit the CPU CFS (Completely Fair Scheduler) quota
      -c, --cpu-shares int          CPU shares (relative weight)
          --cpuset-cpus string      CPUs in which to allow execution (0-3, 0,1)
          --cpuset-mems string      MEMs in which to allow execution (0-3, 0,1)
          --disable-content-trust   Skip image verification (default true)
      -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
          --force-rm                Always remove intermediate containers
          --iidfile string          Write the image ID to the file
          --isolation string        Container isolation technology
          --label list              Set metadata for an image
      -m, --memory bytes            Memory limit
          --memory-swap bytes       Swap limit equal to memory plus swap: '-1' to enable unlimited swap
          --network string          Set the networking mode for the RUN instructions during build
                                    (default "default")
          --no-cache                Do not use cache when building the image
          --pull                    Always attempt to pull a newer version of the image
      -q, --quiet                   Suppress the build output and print image ID on success
          --rm                      Remove intermediate containers after a successful build (default true)
          --security-opt strings    Security options
          --shm-size bytes          Size of /dev/shm
      -t, --tag list                Name and optionally a tag in the 'name:tag' format       #打标签
          --target string           Set the target build stage to build.
          --ulimit ulimit           Ulimit options (default [])
    [root@localhost Docker_iamge]# 
    [root@localhost Docker_iamge]# 
    

    Dockerfile 格式编写

    [root@localhost Docker_iamge]# ls
    Dockerfile  index.html
    [root@localhost Docker_iamge]# cat Dockerfile
    # Description :test image
    
    FROM busybox:latest
    #一个Dockerfile 必须用`FROM`指令启动。该FROM指令指定您正在构建的基本映像
    LABEL "com.example.vendor"="ACME Incorporated"
    LABEL com.example.label-with-value="foo"
    LABEL version="1.0"
    LABEL description="This text illustrates 
    that label-values can span multiple lines." 
    #LABEL 标签
    
    COPY   index.html /www/html/index.html
    #该COPY指令从中复制新文件或目录<src> ,并将它们添加到路径中容器的文件系统中<dest> [root@localhost Docker_iamge]#

      

     docker build 构建镜像 

    [root@localhost Docker_iamge]# docker build -t httpdtest:v1 .          
    Sending build context to Docker daemon  15.87kB
    Step 1/6 : FROM busybox:latest
     ---> 64f5d945efcc
    Step 2/6 : LABEL "com.example.vendor"="ACME Incorporated"
     ---> Running in cfdd36a69097
    Removing intermediate container cfdd36a69097
     ---> 6bbc54c2f4e4
    Step 3/6 : LABEL com.example.label-with-value="foo"
     ---> Running in 3ae90f68ae1c
    Removing intermediate container 3ae90f68ae1c
     ---> 92b662f0bfd9
    Step 4/6 : LABEL version="1.0"
     ---> Running in 36194eff5eb8
    Removing intermediate container 36194eff5eb8
     ---> 9e3a4c064dc7
    Step 5/6 : LABEL description="This text illustrates that label-values can span multiple lines."
     ---> Running in cdfcef379b7a
    Removing intermediate container cdfcef379b7a
     ---> 05ed662e3088
    Step 6/6 : COPY   index.html /www/html/index.html
     ---> 6060a9cb9597
    Successfully built 6060a9cb9597
    Successfully tagged httpdtest:v1
    [root@localhost Docker_iamge]# 
    
    [root@localhost Docker_iamge]# docker image ls
    REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
    httpdtest                          v1                  6060a9cb9597        5 minutes ago       1.2MB
    test                               v2.0                51f46a949468        8 days ago          1.2MB
    test                               v1.0                648f9e13a37c        9 days ago          1.2MB
    zy/busybox                         v0.1                4c9fa4db9491        9 days ago          1.2MB
    dockerpracticecn/docker_practice   latest              b6bfd54275de        4 weeks ago         41.8MB
    busybox                            latest              64f5d945efcc        4 weeks ago         1.2MB
    nginx                              latest              53f3fd8007f7        5 weeks ago         109MB
    [root@localhost Docker_iamge]# 

     

     [root@localhost Docker_iamge]# docker run --name q2 --rm httpdtest:v3 cat /www/html/index.html #检查是否包含添加的内容
      <h1> test copy line </h1>
      [root@localhost Docker_iamge]#
    

      

    ADD 指令

    ADD有两种形式:
    
    ADD [--chown=<user>:<group>] <src>... <dest>
    ADD [--chown=<user>:<group>] ["<src>",... "<dest>"] (包含空格的路径需要此表单)
    注意:该--chown功能仅在用于构建Linux容器的Dockerfiles上受支持,并且不适用于Windows容器。由于用户和组所有权概念不能在Linux和Windows之间进行转换,因此使用/etc/passwd和/etc/group将用户名和组名转换为ID会限制此功能仅适用于基于Linux OS的容器。
    
    该ADD指令从中复制新文件,目录或远程文件URL <src> ,并将它们添加到路径上图像的文件系统中<dest>。
    
    <src>可以指定多
    
    [root@localhost Docker_iamge]# cat Dockerfile 
    # Description :test image
    
    FROM busybox:latest
    #一个Dockerfile 必须用`FROM`指令启动。该FROM指令指定您正在构建的基本映像
    LABEL "com.example.vendor"="ACME Incorporated"
    LABEL com.example.label-with-value="foo"
    LABEL version="1.0"
    LABEL description="This text illustrates that label-values can span multiple lines." 
    #LABEL 标签
    
    COPY   index.html /www/html/index.html
    #COPY   /etc/sysconfig/   /test/sysconfig/
    
    ADD http://nginx.org/download/nginx-1.17.0.tar.gz /usr/local/nginx/
    # [root@localhost Docker_iamge]#

      

    WORKDIR   #指定默认的工作目录,在后续不指定路径时 WORKDIR 就是默认目录
    WORKDIR /path/to/workdir
    该WORKDIR指令集的工作目录对任何RUN,CMD, ENTRYPOINT,COPY和ADD它后面的说明Dockerfile。如果WORKDIR不存在,即使它未在任何后续Dockerfile指令中使用,也将创建它。
    
    该WORKDIR指令可以在a中多次使用Dockerfile。如果提供了相对路径,则它将相对于前一条WORKDIR指令的路径 。例如:
    
    WORKDIR /a
    WORKDIR b
    WORKDIR c
    RUN pwd
    

      

    VOLUME
    VOLUME ["/data"]
    该VOLUME指令创建具有指定名称的安装点,并将其标记为从本机主机或其他容器保存外部安装的卷。该值可以是JSON数组,VOLUME ["/var/log/"]或具有多个参数的普通字符串,例如VOLUME /var/log或VOLUME /var/log /var/db。有关通过Docker客户端提供的更多信息/示例和安装说明,请参阅 通过卷共享目录 文档。
    
    [root@localhost Docker_iamge]# cat Dockerfile 
    # Description :test image
    
    FROM busybox:latest
    #一个Dockerfile 必须用`FROM`指令启动。该FROM指令指定您正在构建的基本映像
    LABEL "com.example.vendor"="ACME Incorporated"
    LABEL com.example.label-with-value="foo"
    LABEL version="1.0"
    LABEL description="This text illustrates that label-values can span multiple lines." 
    #LABEL 标签
    
    COPY   index.html /www/html/index.html
    #COPY   /etc/sysconfig/   /test/sysconfig/
    
    
    #ADD http://nginx.org/download/nginx-1.17.0.tar.gz /usr/local/nginx/
    RUN mkdir -p /test/mysql/
    VOLUME /test/mysql
    #VOLUME 只能使用自动挂载的方法,在容器启动后能够看到对应的挂载文件,否则 inspect image 只能看到挂载点,看不到主机指定源目录
    #指定Docker 的自动挂载 [root@localhost Docker_iamge]#

    ENV

    ENV
    ENV <key> <value>
    ENV <key>=<value> ...
    该ENV指令将环境变量<key>设置为该值 <value>。此值将在构建阶段中的所有后续指令的环境中,并且也可以在许多内联替换。
    
    该ENV指令有两种形式。第一种形式,ENV <key> <value>将单个变量设置为一个值。第一个空格后的整个字符串将被视为<value>- 包括空格字符。该值将针对其他环境变量进行解释,因此如果未对其进行转义,则将删除引号字符。
    
    第二种形式ENV <key>=<value> ...允许一次设置多个变量。请注意,第二种形式在语法中使用等号(=),而第一种形式则不然。与命令行解析一样,引号和反斜杠可用于在值内包含空格。
    
    例如:
    
    ENV myName="John Doe" myDog=Rex The Dog 
        myCat=fluffy
    和
    
    ENV myName John Doe
    ENV myDog Rex The Dog
    ENV myCat fluffy
    

      

    -e   : 运行镜像时定义环境变量
    [root@localhost Docker_iamge]# docker run -it --name aqd --rm -e tttt="ffffff" httptest:v8.0 printenv PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=892d0430a927 TERM=xterm tttt=ffffff DOC_ROOT=/src/data/test1/ HOME=/root [root@localhost Docker_iamge]# [root@localhost Docker_iamge]#

      

    ARG
    ARG <name>[=<default value>]
    该ARG指令定义了一个变量,用户可以docker build使用该--build-arg <varname>=<value> 标志在构建时将该变量传递给构建器。如果用户指定了未在Dockerfile中定义的构建参数,则构建会输出警告。
    
    [Warning] One or more build-args [foo] were not consumed.
    Dockerfile可以包括一个或多个ARG指令。例如,以下是有效的Dockerfile:
    
    FROM busybox
    ARG user1
    ARG buildno
    ...
    警告:建议不要使用构建时变量来传递github密钥,用户凭据等秘密docker history。使用该命令,构建时变量值对于映像的任何用户都是可见的。
    
    默认值
    的ARG指令可以可选地包括一个默认值:
    
    FROM busybox
    ARG user1=someuser
    ARG buildno=1
    ...
    如果ARG指令具有默认值,并且在构建时没有传递值,则构建器将使用默认值。
    
    范围
    

      

     

      

      

      

  • 相关阅读:
    C语言基础10
    swift笔记06
    C语言基础09
    C语言基础08
    C语言基础07
    C语言基础06
    swift笔记05
    Swift笔记4
    C语言基础05
    [转]一个清华计算机博士生的退学申请
  • 原文地址:https://www.cnblogs.com/zy09/p/11017382.html
Copyright © 2020-2023  润新知