zoukankan      html  css  js  c++  java
  • dockerfile的编写

    ARG :指定创建镜像过程中使用的变量

    格式 ARG  <name> = [<default value>];在执行docker build 的时候,可以通过-build-arg=来为变量赋值。当镜像编译成功后,ARG指定的变量将再存在(ENV 指定的变量会留在镜像里保留)。docker 内置了一些镜像创建变量,用户可以直接使用无需声明,包括(区分大小写)HPPT_PROXY、HTTPS_PROXY、FTP_PROXY、NO_PROXY

    FROM: 指定创建镜像时使用的基础镜像

    格式 FROM <image>  [AS <name>] 或者 FROM  <image>:<tag> [AS <name>] 或者FROM  <image>@<digest> [AS <name>];任何Dockerfile中第一条指令必须为FROM指令。并且,如果同一个dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次);为保证镜像精简,可以选用体积较小的镜像如Alpine或Debian作为基础镜像

    [root@master ~]# cat Dockerfile 
    ARG   VERSION=9.3
    FROM debian:${VERSION}
    [root@master ~]# docker build -t cx /root
    Sending build context to Docker daemon  386.9MB
    Step 1/2 : ARG   VERSION=9.3
    Step 2/2 : FROM debian:${VERSION}
    9.3: Pulling from library/debian
    3e731ddb7fc9: Pull complete 
    Digest: sha256:4fcd8c0b6f5e3bd44a3e63be259fd0c038476d432953d449ef34aedf16def331
    Status: Downloaded newer image for debian:9.3
     ---> 1b3ec9d977fb
    Successfully built 1b3ec9d977fb
    Successfully tagged cx:latest
    [root@master ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    busybox             latest              83aa35aa1c79        11 days ago         1.22MB
    cx                  latest              1b3ec9d977fb        2 years ago         100MB
    debian              9.3                 1b3ec9d977fb        2 years ago         100MB
    

    LABEL:指令生成镜像添加元数据的标签信息。这些标签信息可以用来辅助过滤特定镜像

    格式 LABEL   <key> = <value> ....

    [root@master ~]# cat Dockerfile 
    ARG   VERSION=9.3
    FROM debian:${VERSION}
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    [root@master ~]# docker build -t cx:0.v1 /root
    Sending build context to Docker daemon  386.9MB
    Step 1/4 : ARG   VERSION=9.3
    Step 2/4 : FROM debian:${VERSION}
     ---> 1b3ec9d977fb
    Step 3/4 : LABEL   version="1.0.0-rc3"
     ---> Running in 1a7cd7bc3b50
    Removing intermediate container 1a7cd7bc3b50
     ---> fa75eedc0b84
    Step 4/4 : LABEL   author="cx@github" date="2020-03-19"
     ---> Running in c7cbfb899f2d
    Removing intermediate container c7cbfb899f2d
     ---> c837f32b47bd
    Successfully built c837f32b47bd
    Successfully tagged cx:0.v1
    

       EXPOSE 声明镜像内服务监听的端口。格式为EXPOSE <port> [<port>/<portocol>]

    [root@master ~]# cat Dockerfile 
    ARG   VERSION=9.3
    FROM debian:${VERSION}
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    EXPOSE   22  808
    [root@master ~]# docker build -t cx:0.v2 /root
    
    

      注意该指令只是起到声明作用,并不会自动完成端口映射,如果想要映射端口,在启动容器时可以使用-P参数 或者 -p HOST_PORT(主机端口):CONAINER_PORT(容器端口)

     ENV:指定环境变量,镜像生成过程中会被后续的RUN指令使用,在镜像启动后也会存在;

    格式:ENV   <key>   <value>   或者 ENV key = value

    [root@master ~]# cat Dockerfile 
    ARG   VERSION=9.3
    FROM debian:${VERSION}
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    EXPOSE   22  808
    ENV   APP_VERSION=1.0.0
    [root@master ~]# docker build -t cx:0.v3 /root
    
    

      注意指令指定环境变量在运行时可以被覆盖掉,如docker run --env <key>=<value> image;当一条ENV指令中同时为多个环境变量赋值并且值也是从环境变量里取,会为环境变量赋值后再更新,最终结果key1=value1 key2= value2

    ENV key1=value2
    ENV key1= value1 key2=${key1}
    

      ENTRYPOINT:指定镜像默认入口命令,该入口命令会在启动容器时作为根命令去执行,所有传入值作为该命令参数;类似于CMD的功能,用于为容器指定默认启动程序。从而是容器像一个单独的可执行程序,与CMD不同的是; 由ENTRYPOINT启动的程序不会被docker   run 命令行指定的参数覆盖,而CMD指定的命令则被当做参数传递给ENTRYPOINT指定的程序;不过 docker run 命令的 --entrypoint 选项参数可以覆盖ENTRYPOINT指令指定的程序

    格式  ENTRYPOINT  <command>  或者 ENTRYPOINT ["<excutable>","<param1>","<param2>"]

    Docker run 传入的命令参数会覆盖CMD指令指定的内容;Dockerfile可以存着多个ENTRYPOINT指令,仅最后一个生效

    [root@master image]# cat Dockerfile 
    #ARG   VERSION=9.3
    FROM busybox
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    ENV WEB_DOC_ROOT="data/web/html"
    RUN mkdir -p $WEB_DOC_ROOT && 
        echo 'hijkjk' > ${WEB_DOC_ROOT}/index.html
    ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
    
    [root@master image]# docker build -t cx:0.t2 ./
    Sending build context to Docker daemon  1.042MB
    Step 1/6 : FROM busybox
     ---> 83aa35aa1c79
    Step 2/6 : LABEL   version="1.0.0-rc3"
     ---> Using cache
     ---> e17e8c86f021
    Step 3/6 : LABEL   author="cx@github" date="2020-03-19"
     ---> Using cache
     ---> be9c2eec007b
    Step 4/6 : ENV WEB_DOC_ROOT="data/web/html"
     ---> Using cache
     ---> e725ad9bdef2
    Step 5/6 : RUN mkdir -p $WEB_DOC_ROOT &&     echo 'hijkjk' > ${WEB_DOC_ROOT}/index.html
     ---> Using cache
     ---> 0efeb4d09426
    Step 6/6 : ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
     ---> Running in 72e6ca9cab6b
    Removing intermediate container 72e6ca9cab6b
     ---> f75510b7e2fc
    Successfully built f75510b7e2fc
    Successfully tagged cx:0.t2
    [root@master image]# docker run  --name web-2 --rm cx:0.t2 /bin/ls /etc
    

      

    COPY 复制操作

    格式 COPY <源>  目标  或者 COPY “源”“目标” 

    源:复制的源文件及目录,支持通配符 

    目标: 目标路径,既正常创建的image的文件系统路径,建议使用绝对路径

    复制准则:源文件必须为build上下文中路径,不能是父目录;如果源文件是目录,则其内部文件或子目录会被递归复制,但源文件目录自身不会被复制;如果指定多个源文件,或者使用通配符,则目标必须是一个目标且必须以/结尾;如果目标不存在,它会被自动创建,这包括其父目录

    [root@master ~]# echo "wergthjkl;" > index.html
    [root@master ~]# cat Dockerfile 
    ARG   VERSION=9.3
    FROM debian:${VERSION}
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    EXPOSE   22  808
    ENV   APP_VERSION=1.0.0
    COPY index.html /data/web/html/
    [root@master ~]# docker build -t cx:0.v5 /root
    Sending build context to Docker daemon  386.9MB
    Step 1/7 : ARG   VERSION=9.3
    Step 2/7 : FROM debian:${VERSION}
     ---> 1b3ec9d977fb
    Step 3/7 : LABEL   version="1.0.0-rc3"
     ---> Using cache
     ---> fa75eedc0b84
    Step 4/7 : LABEL   author="cx@github" date="2020-03-19"
     ---> Using cache
     ---> c837f32b47bd
    Step 5/7 : EXPOSE   22  808
     ---> Using cache
     ---> a989df6b5cf3
    Step 6/7 : ENV   APP_VERSION=1.0.0
     ---> Using cache
     ---> 7315ee41a9c9
    Step 7/7 : COPY index.html /data/web/html/
     ---> 12163b0f561a
    Successfully built 12163b0f561a
    Successfully tagged cx:0.v5
    [root@master ~]# docker run -it cx:0.v5 /bin/sh
    # ls /data/web/html
    index.html
    # cat /data/web/html/index.html
    wergthjkl;
    # exit
    

       ADD 指令类似于COPY指令,ADD支持压缩文件解压和URL路径

    [root@master ~]# cat Dockerfile 
    ARG   VERSION=9.3
    FROM debian:${VERSION}
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    EXPOSE   22  808
    ENV   APP_VERSION=1.0.0
    COPY index.html /data/web/html/
    ADD http://nginx.org/download/nginx-1.17.9.tar.gz    /data/nginx/
    [root@master ~]# docker build -t cx:0.v6 /root
    Sending build context to Docker daemon  386.9MB
    Step 1/8 : ARG   VERSION=9.3
    Step 2/8 : FROM debian:${VERSION}
     ---> 1b3ec9d977fb
    Step 3/8 : LABEL   version="1.0.0-rc3"
     ---> Using cache
     ---> fa75eedc0b84
    Step 4/8 : LABEL   author="cx@github" date="2020-03-19"
     ---> Using cache
     ---> c837f32b47bd
    Step 5/8 : EXPOSE   22  808
     ---> Using cache
     ---> a989df6b5cf3
    Step 6/8 : ENV   APP_VERSION=1.0.0
     ---> Using cache
     ---> 7315ee41a9c9
    Step 7/8 : COPY index.html /data/web/html/
     ---> Using cache
     ---> 12163b0f561a
    Step 8/8 : ADD http://nginx.org/download/nginx-1.17.9.tar.gz    /data/nginx/
    Downloading [==================================================>]  1.039MB/1.039MB
     ---> 10cb74dc466b
    Successfully built 10cb74dc466b
    Successfully tagged cx:0.v6
    [root@master ~]# docker run -it cx:0.v6  /bin/sh
    # ls /data/nginx
    nginx-1.17.9.tar.gz
    

      本地压缩文件测试

    [root@master ~]# cat Dockerfile 
    ARG   VERSION=9.3
    FROM debian:${VERSION}
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    EXPOSE   22  808
    ENV   APP_VERSION=1.0.0
    COPY index.html /data/web/html/
    ADD http://nginx.org/download/nginx-1.17.9.tar.gz    /data/nginx/
    ADD flink-1.10.0-src.tgz   /data/flink
    [root@master ~]# ls
    anaconda-ks.cfg  Dockerfile  flink-1.10.0-src.tgz  hadoop  hadoop-2.6.1.tar.gz  index.html  jdk-8u161-linux-x64.tar.gz
    [root@master ~]# docker build -t cx:0.v7 /root
    Sending build context to Docker daemon  408.8MB
    Step 1/9 : ARG   VERSION=9.3
    Step 2/9 : FROM debian:${VERSION}
     ---> 1b3ec9d977fb
    Step 3/9 : LABEL   version="1.0.0-rc3"
     ---> Using cache
     ---> fa75eedc0b84
    Step 4/9 : LABEL   author="cx@github" date="2020-03-19"
     ---> Using cache
     ---> c837f32b47bd
    Step 5/9 : EXPOSE   22  808
     ---> Using cache
     ---> a989df6b5cf3
    Step 6/9 : ENV   APP_VERSION=1.0.0
     ---> Using cache
     ---> 7315ee41a9c9
    Step 7/9 : COPY index.html /data/web/html/
     ---> Using cache
     ---> 12163b0f561a
    Step 8/9 : ADD http://nginx.org/download/nginx-1.17.9.tar.gz    /data/nginx/
    Downloading [==================================================>]  1.039MB/1.039MB
     ---> Using cache
     ---> 10cb74dc466b
    Step 9/9 : ADD flink-1.10.0-src.tgz   /data/flink
     ---> 534050f68c8a
    Successfully built 534050f68c8a
    Successfully tagged cx:0.v7
    [root@master ~]# docker run -it cx:0.v7  /bin/sh
    # ls /data/flink
    flink-1.10.0
    # ls /data/flink/flink-1.10.0
    LICENSE		     flink-clients     flink-docs	       flink-java	 flink-ml-parent	flink-runtime-web     flink-streaming-scala    flink-yarn-tests
    NOTICE		     flink-connectors  flink-end-to-end-tests  flink-jepsen	 flink-optimizer	flink-scala	      flink-table	       licenses
    README.md	     flink-container   flink-examples	       flink-kubernetes  flink-python		flink-scala-shell     flink-test-utils-parent  pom.xml
    azure-pipelines.yml  flink-contrib     flink-filesystems       flink-libraries	 flink-queryable-state	flink-shaded-curator  flink-tests	       tools
    docs		     flink-core        flink-formats	       flink-mesos	 flink-quickstart	flink-state-backends  flink-walkthroughs
    flink-annotations    flink-dist        flink-fs-tests	       flink-metrics	 flink-runtime		flink-streaming-java  flink-yarn
    

      WORKDIR 设定工作目录

    ARG   VERSION=9.3
    FROM debian:${VERSION}
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    EXPOSE   22  808
    ENV   APP_VERSION=1.0.0
    COPY index.html /data/web/html/
    #ADD http://nginx.org/download/nginx-1.17.9.tar.gz    /data/nginx/
    ADD flink-1.10.0-src.tgz   /data/flink
    WORKDIR /data
    [root@master ~]# docker build -t cx:0.v8 /root
    Sending build context to Docker daemon  408.8MB
    Step 1/9 : ARG   VERSION=9.3
    Step 2/9 : FROM debian:${VERSION}
     ---> 1b3ec9d977fb
    Step 3/9 : LABEL   version="1.0.0-rc3"
     ---> Using cache
     ---> fa75eedc0b84
    Step 4/9 : LABEL   author="cx@github" date="2020-03-19"
     ---> Using cache
     ---> c837f32b47bd
    Step 5/9 : EXPOSE   22  808
     ---> Using cache
     ---> a989df6b5cf3
    Step 6/9 : ENV   APP_VERSION=1.0.0
     ---> Using cache
     ---> 7315ee41a9c9
    Step 7/9 : COPY index.html /data/web/html/
     ---> Using cache
     ---> 12163b0f561a
    Step 8/9 : ADD flink-1.10.0-src.tgz   /data/flink
     ---> 19096a36262f
    Step 9/9 : WORKDIR /data
     ---> Running in e4a4a04ce841
    Removing intermediate container e4a4a04ce841
     ---> 99eb5a8d863f
    Successfully built 99eb5a8d863f
    Successfully tagged cx:0.v8
    [root@master ~]# docker run -it cx:0.v8  /bin/sh
    # pwd
    /data
               
    

      VOLUME:创建一个数据卷挂载点;格式为VOLUME ["/data"];用于在image中创建一个挂载点目录,以挂载Docker host 上的卷或其他容器上的卷如果挂在点目录路径下此前在文件存在,docker run命令会在挂在卷挂在完成后将此前的索引文件复制到新挂在的卷中

    [root@master ~]# cat Dockerfile 
    ARG   VERSION=9.3
    FROM debian:${VERSION}
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    EXPOSE   22  808
    ENV   APP_VERSION=1.0.0
    COPY index.html /data/web/html/
    #ADD http://nginx.org/download/nginx-1.17.9.tar.gz    /data/nginx/
    ADD flink-1.10.0-src.tgz   /data/flink
    WORKDIR /data
    VOLUME  /data/mysql
    [root@master ~]# docker build -t cx:0.v9 /root
    Sending build context to Docker daemon  408.8MB
    Step 1/10 : ARG   VERSION=9.3
    Step 2/10 : FROM debian:${VERSION}
     ---> 1b3ec9d977fb
    Step 3/10 : LABEL   version="1.0.0-rc3"
     ---> Using cache
     ---> fa75eedc0b84
    Step 4/10 : LABEL   author="cx@github" date="2020-03-19"
     ---> Using cache
     ---> c837f32b47bd
    Step 5/10 : EXPOSE   22  808
     ---> Using cache
     ---> a989df6b5cf3
    Step 6/10 : ENV   APP_VERSION=1.0.0
     ---> Using cache
     ---> 7315ee41a9c9
    Step 7/10 : COPY index.html /data/web/html/
     ---> Using cache
     ---> 12163b0f561a
    Step 8/10 : ADD flink-1.10.0-src.tgz   /data/flink
     ---> Using cache
     ---> 19096a36262f
    Step 9/10 : WORKDIR /data
     ---> Using cache
     ---> 99eb5a8d863f
    Step 10/10 : VOLUME  /data/mysql
     ---> Running in 5b388ececba3
    Removing intermediate container 5b388ececba3
     ---> 36d0c793b212
    Successfully built 36d0c793b212
    Successfully tagged cx:0.v9
    [root@master ~]# docker run --name ww --rm cx:0.v9 mount
    overlay on / type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/FZMDHLVJYWHK3QKJ6N5QVLMURE:/var/lib/docker/overlay2/l/OUFAS52HHG5ZSEUZXQFJH6J5J3:/var/lib/docker/overlay2/l/REN4VJX2
    R2AXBG4ZYUF6YWSK7T:/var/lib/docker/overlay2/l/PLWU4G3GY76YVRTV7HVOCP3S25,upperdir=/var/lib/docker/overlay2/1172520db62eddc83d464b9d2f41e9341e023d01347b7105f9af61d848a23a89/diff,workdir=/var/lib/docker/overlay2/1172520db62eddc83d464b9d2f41e9341e023d01347b7105f9af61d848a23a89/work)proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
    tmpfs on /dev type tmpfs (rw,nosuid,size=65536k,mode=755)
    devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
    sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
    tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
    cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
    cgroup on /sys/fs/cgroup/hugetlb type cgroup (ro,nosuid,nodev,noexec,relatime,hugetlb)
    cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
    cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
    cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,net_prio,net_cls)
    cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)  
    cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct,cpu)
    cgroup on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids)
    cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
    cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
    cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
    mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
    shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
    /dev/mapper/centos_hadoop--1-root on /data/mysql type xfs (rw,relatime,attr2,inode64,noquota)   挂在了
    /dev/mapper/centos_hadoop--1-root on /etc/resolv.conf type xfs (rw,relatime,attr2,inode64,noquota)
    /dev/mapper/centos_hadoop--1-root on /etc/hostname type xfs (rw,relatime,attr2,inode64,noquota)
    /dev/mapper/centos_hadoop--1-root on /etc/hosts type xfs (rw,relatime,attr2,inode64,noquota)
    proc on /proc/bus type proc (ro,relatime)
    proc on /proc/fs type proc (ro,relatime)
    proc on /proc/irq type proc (ro,relatime)
    proc on /proc/sys type proc (ro,relatime)
    proc on /proc/sysrq-trigger type proc (ro,relatime)
    tmpfs on /proc/asound type tmpfs (ro,relatime)
    tmpfs on /proc/acpi type tmpfs (ro,relatime)
    tmpfs on /proc/kcore type tmpfs (rw,nosuid,size=65536k,mode=755)
    tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755)
    tmpfs on /proc/timer_list type tmpfs (rw,nosuid,size=65536k,mode=755)
    tmpfs on /proc/timer_stats type tmpfs (rw,nosuid,size=65536k,mode=755)
    tmpfs on /proc/sched_debug type tmpfs (rw,nosuid,size=65536k,mode=755)
    tmpfs on /proc/scsi type tmpfs (ro,relatime)
    tmpfs on /sys/firmware type tmpfs (ro,relatime)
    

      RUN  构建镜像时使用的命领

    [root@master ~]# cat Dockerfile 
    ARG   VERSION=9.3
    FROM debian:${VERSION}
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    EXPOSE   22  808
    ENV   APP_VERSION=1.0.0
    COPY index.html /data/web/html/
    ADD http://nginx.org/download/nginx-1.17.9.tar.gz    /usr/local/src
    ADD flink-1.10.0-src.tgz   /data/flink
    WORKDIR /data
    VOLUME  /data/mysql
    RUN cd /usr/local/src && 
        tar -xf nginx-1.17.9.tar.gz && 
        mv nginx-1.17.9 nginx
    [root@master ~]# docker build -t cx:0.v10 /root
    Sending build context to Docker daemon  408.8MB
    Step 1/12 : ARG   VERSION=9.3
    Step 2/12 : FROM debian:${VERSION}
     ---> 1b3ec9d977fb
    Step 3/12 : LABEL   version="1.0.0-rc3"
     ---> Using cache
     ---> fa75eedc0b84
    Step 4/12 : LABEL   author="cx@github" date="2020-03-19"
     ---> Using cache
     ---> c837f32b47bd
    Step 5/12 : EXPOSE   22  808
     ---> Using cache
     ---> a989df6b5cf3
    Step 6/12 : ENV   APP_VERSION=1.0.0
     ---> Using cache
     ---> 7315ee41a9c9
    Step 7/12 : COPY index.html /data/web/html/
     ---> Using cache
     ---> 12163b0f561a
    Step 8/12 : ADD http://nginx.org/download/nginx-1.17.9.tar.gz    /usr/local/src
    Downloading [==================================================>]  1.039MB/1.039MB
     ---> Using cache
     ---> 36b26842f945
    Step 9/12 : ADD flink-1.10.0-src.tgz   /data/flink
     ---> Using cache
     ---> 9cc7582a2bcb
    Step 10/12 : WORKDIR /data
     ---> Using cache
     ---> 08b2ca89e058
    Step 11/12 : VOLUME  /data/mysql
     ---> Using cache
     ---> abbb95cb28fa
    Step 12/12 : RUN cd /usr/local/src &&     tar -xf nginx-1.17.9.tar.gz &&     mv nginx-1.17.9 nginx
     ---> Running in d2080bb2a0c7
    Removing intermediate container d2080bb2a0c7
     ---> 71c43b165b47
    Successfully built 71c43b165b47
    Successfully tagged cx:0.v10
    [root@master ~]# docker run --name ww -it --rm cx:0.v10 /bin/sh
    # ls /usr/local/src/nginx
    CHANGES  CHANGES.ru  LICENSE  README  auto  conf  configure  contrib  html  man  src
    

      CMD 定义容器启动;类似于RUN指令,CMD指令也可用于运行任何命令或者应用程序,不过二者运行时间不同,RUN指令运行与镜像文件构造时,而CMD指令则是基于dockerfil指令构造出镜像启动容器时;CMD指令首要目的在于为启动容器指定默认要运行的程序,且运行结束,容器也就终止;不过CMD指令的命令可以被docker run 的命令行参数覆盖;在dockerfile中存在多个CMD指令,但仅最后一个生效

    格式:CMD   <command>或者 CMD  ["<executale/bin/sh>","<param1-c>","<param2>"]  可以启动为ID 为1 进程 或者 CMD ["<param1>","<param2>"]

    前两种语法格式的意义同RUN;第三种则用于ENTRYPOINT指令提供默认参数

    [root@master image]# cat Dockerfile 
    #ARG   VERSION=9.3
    FROM busybox
    LABEL   version="1.0.0-rc3"
    LABEL   author="cx@github" date="2020-03-19"
    ENV WEB_DOC_ROOT="data/web/html"
    RUN mkdir -p $WEB_DOC_ROOT && 
        echo 'hijkjk' > ${WEB_DOC_ROOT}/index.html
    CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
    [root@master image]# docker run --name web -it --rm cx:0.t1
    [root@master image]# docker exec -it web /bin/sh
    / # ps
    PID   USER     TIME  COMMAND
        1 root      0:00 /bin/httpd -f -h data/web/html
        6 root      0:00 /bin/sh
       11 root      0:00 ps
    

         编写nginx

    [root@master image3]# cat nginx.sh 
    #!/bin/sh
    cat > /etc/nginx/conf.d/www.conf << EOF
    {
    	server_name $HOSTNAME;
    	listen ${IP:-0.0.0.0}:${PORT:-80};
    	root ${NGX_DOC_ROOT:-/usr/share/nginx/html};
    }
    EOF
    exec "$0"
    [root@master image3]# chmod +x nginx.sh 
    [root@master image3]# cat Dockerfile 
    FROM nginx:1.14-alpine
    ENV NGX_DOC_ROOT='/data/web/html/'
    ADD nginx.sh /bin/
    CMD ["/usr/sbin/nginx","-g","daemon off;"]
    ENTRYPOINT ['/bin/nginx.sh']
    [root@master image3]# docker build -t cx:0.t3 ./
    Sending build context to Docker daemon  3.072kB
    Step 1/5 : FROM nginx:1.14-alpine
    1.14-alpine: Pulling from library/nginx
    bdf0201b3a05: Pull complete 
    3d0a573c81ed: Pull complete 
    8129faeb2eb6: Pull complete 
    3dc99f571daf: Pull complete 
    Digest: sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
    Status: Downloaded newer image for nginx:1.14-alpine
     ---> 8a2fb25a19f5
    Step 2/5 : ENV NGX_DOC_ROOT='/data/web/html/'
     ---> Running in 393a64ec4495
    Removing intermediate container 393a64ec4495
     ---> 12d2ce879743
    Step 3/5 : ADD nginx.sh /bin/
     ---> f18a559fceef
    Step 4/5 : CMD ["/usr/sbin/nginx","-g","daemon off;"]
     ---> Running in 8cc3a5e8c3dd
    Removing intermediate container 8cc3a5e8c3dd
     ---> 30b289008d9b
    Step 5/5 : ENTRYPOINT ['/bin/nginx.sh']
     ---> Running in de582df13434
    Removing intermediate container de582df13434
     ---> ff6ecad9b21b
    Successfully built ff6ecad9b21b
    Successfully tagged cx:0.t3
    

      USER指定运行容器时的用户名或者用户ID,RUN等指令会根据指定的用户身份;

    格式:USER  daemon;当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在dockerfile中创建所需用户

    HEALTHCHECK   容器健康状态监测

    格式:HEALTHCHECK [OPTIONS] CMD command;  根据所执行的命令返回值是否为0来判断; 

             HEALTHCHECKNONE :禁止基础镜像中的健康检查   

             OPTION 支持的参数:-interval=DURATION(default:30s):过多久检查一次;-timeout=DURATION(default:50s)   

        

    草都可以从石头缝隙中长出来更可况你呢
  • 相关阅读:
    多测师讲解html _伪类选择器17_高级讲师肖sir
    多测师讲解html _后代选择器16_高级讲师肖sir
    多测师讲解html _组合选择器_高级讲师肖sir
    多测师讲解html _标签选择器14_高级讲师肖sir
    前端 HTML form表单标签 input标签 type属性 重置按钮 reset
    前端 HTML form表单标签 textarea标签 多行文本
    前端 HTML form表单标签 input标签 type属性 file 上传文件
    前端 HTML form表单标签 input标签 type属性 radio 单选框
    前端 HTML form表单标签 input标签 type属性 checkbox 多选框
    前端 HTML form表单目录
  • 原文地址:https://www.cnblogs.com/rdchenxi/p/12539161.html
Copyright © 2011-2022 走看看