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)   

        

    草都可以从石头缝隙中长出来更可况你呢
  • 相关阅读:
    RSS文章订阅及生成RSS格式的xml
    一次Insert插入多条数据的方法
    构建struts2项目需要使用的最少架包
    Java 的HTML 解析器jsoup
    tomcat定时启动
    栈的实现与应用
    软件加密行业的现状和发展趋势
    InstallShield 2012 Spring新功能试用(18): Suite/Advanced UI 和 Advanced UI工程的界面编辑视图中添加了控件工具栏和语言切换功能
    BUG:InstallShield 2012 Spring之前版本的帮助文档中关于StrGetTokens示例代码的错误
    InstallShield 2012 Spring新功能试用(14): Suite/Advanced UI 和 Advanced UI工程新增加InstallScript安装包的条件检测项
  • 原文地址:https://www.cnblogs.com/rdchenxi/p/12539161.html
Copyright © 2011-2022 走看看