• DockerFile解析


    目录

    DockerFile

    一、是什么

    二、构建步骤

    DockerFile构建过程

    一、DockerFile基础

    二、Docker执行DockerFile的流程

    三、总结

    DockerFile常用保留字

    零、参考Tomcat的DockerFile

    一、FROM

    二、MAINTAINER

    三、RUN

    1.shell

    2.exec

    四、EXPOSE

    五、WORKDIR

    六、USER

    七、ENV

    八、ADD

    九、COPY

    十、VOLUME

    十一、CMD

    1.举个栗子

    2.CMD和RUN之间的区别

    十二、ENTRYPOINT

    1.举个栗子

    2.优点

    3.注意

    举例

    零、需求和准备

    一、编写Dockerfile文件

    二、构建

    UnionFS联合文件系统


    DockerFile

    一、是什么

    DockerFile是用来构建Docker镜像的文本文件,其中包括了一条条构建镜像所需要的指令和参数。


    二、构建步骤

    编写DockerFile文件 ---> Docker build构建镜像 ---> Docker run以镜像运行容器实例。


    DockerFile构建过程

    一、DockerFile基础

    1.每条保留字(至于保留字是什么后面会提)必须为大写字母且后面要跟随至少一个参数

    2.指令按照从从上到下,依次执行

    3.#表示注释

    4.每条指令都会创建一个新的镜像层,并对镜像进行提交


    二、Docker执行DockerFile的流程

    1.docker以基础镜像运行一个容器

    #以镜像启动容器,“有了类,才能new一个对象”

    2.执行一条指令并对容器做出修改

    3.执行类似于Docker commit的操作提交一个新的镜像层

    4.Docker再基于刚刚提交的镜像运行一个新的容器

    5.执行DockerFile中的下一条指令,直到所有指令执行完成


    三、总结

    从应用软件的角度来看,DockerFile、Docker镜像与Docker容器分别代表软件的三个不同阶段,可以看做是它的生命周期

    1.DockerFile是软件的原材料

    2.Docker镜像是软件的交付品

    3.Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例

    DockerFile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

    1 DockerFile,需要定义一个DockerFile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;

    2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务;

    3 Docker容器,容器是直接提供服务的。


    DockerFile常用保留字

    零、参考Tomcat的DockerFile

    这里去DockerHub中去看看tomcat:Docker Hub

    然后随便选一个看看

    这里可能有人会连不上GitHub,复制了部分过来。其DockerFile内容如下:

    1. ...此处省略...
    2. FROM amazoncorretto:8-al2-jdk
    3. ENV CATALINA_HOME /usr/local/tomcat
    4. ENV PATH $CATALINA_HOME/bin:$PATH
    5. RUN mkdir -p "$CATALINA_HOME"
    6. WORKDIR $CATALINA_HOME
    7. # let "Tomcat Native" live somewhere isolated
    8. ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
    9. ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR
    10. # see https://www.apache.org/dist/tomcat/tomcat-10/KEYS
    11. # see also "versions.sh" (https://github.com/docker-library/tomcat/blob/master/versions.sh)
    12. ENV GPG_KEYS A9C5DF4D22E99998D9875A5110C01C5A2F6059E7
    13. ENV TOMCAT_MAJOR 10
    14. ENV TOMCAT_VERSION 10.0.23
    15. ENV TOMCAT_SHA512 0e0263e8280f2ccfb4bef916444a6105fef689a3d95c334c8a7bfe59f1e3966d48ea624727f1818a4df331a603f1ac5e21b908dda3cae676ddc1aef90c2d12ab
    16. ...内容过多,此处省略...
    17. # verify Tomcat Native is working properly
    18. RUN set -eux; \
    19. nativeLines="$(catalina.sh configtest 2>&1)"; \
    20. nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')"; \
    21. nativeLines="$(echo "$nativeLines" | sort -u)"; \
    22. if ! echo "$nativeLines" | grep -E 'INFO: Loaded( APR based)? Apache Tomcat Native library' >&2; then \
    23. echo >&2 "$nativeLines"; \
    24. exit 1; \
    25. fi
    26. EXPOSE 8080
    27. CMD ["catalina.sh", "run"]

    这里官网上标红的部分如FROM  ENV  RUN  WORKDIR  EXPOSE  CMD这些就是上面提到的保留字,可以看做是命令关键字。例如最后所提到的

    EXPOSE 8080

    这也就是tomcat所暴露的默认端口8080。在官网How to use this image.这一节中有提到:

    运行默认的Tomcat服务,相当于在启动后默认添加一段:

    CMD ["catalina.sh", "run"]

    这一段就来自于刚刚所看的DockerFile的结尾。


    一、FROM

    基本上都会出现在DockerFile的第一行。代表你目前的镜像来自于哪,它的基础镜像是什么,有点类似于继承的哪个父类。比如上面看的Tomcat中的第一行:

    FROM amazoncorretto:8-al2-jdk

    意思为,他的基础镜像是亚马逊...,然后在此基础之上添加了下面的内容。 


    二、MAINTAINER

    维护者,用于标注镜像的作者,和TA的联系方式。


    三、RUN

    容器构建时所需要的命令(也就是说DockerFile变成Docker镜像的build过程中,会读取你DockerFile中用RUN这个关键字所编写的命令),一种是shell一种是exec。

    1.shell

    1. RUN <命令行命令>
    2. <命令行命令>等同于在终端中的shell命令

    例子:

    当我们要在容器中添加一个vim功能时,要使用到yum。而以下的命令则是告诉你:在基础镜像之上,我们添加了一个安装vim的功能

    RUN yum -y install vim

    2.exec

    1. RUN ["可执行文件","参数1","参数2"]
    2. #RUN ["./123.sh","1","2"] 等价于RUN ./123.sh 1 2

    四、EXPOSE

    当前容器对外曝露的端口,类似于运行容器时添加的 -p -P


    五、WORKDIR

    在容器创建以后,终端默认登陆进来的工作目录就是一个落脚点。

    举例:咱们在容器里运行个Ubuntu看看:

    docker run -it ubuntu bash

    在运行后紧接着pwd查看一下当先位置:

    pwd

    可以看到当前在根目录,所以说Ubuntu的默认落脚点为自身的根目录。

    咱们换一个看看其它情况(这里故意加了一个bash,以用作演示):

    docker run -it -p 8080:8080 tomcat:8 bash

    接着pwd:

    pwd

    可以看到这里的落脚点为 /usr/local/tomcat

    至于为什么咱们的Ubuntu和tomcat的落脚点会不同,就是因为tomcat的DockerFile中用WORKDIR自己定义了一个落脚点。 在后面的七、ENV那块还会提一嘴。


    六、USER

    指定该镜像以什么样的用户去执行,若不指定,则默认为root。


    七、ENV

    运行时环境。用来在构建镜像过程中设置环境变量。

    再来看看之前看tomcat的DockerFile这张图:

    比如这里的:

    ENV CATALINA_HOME /usr/local/tomcat

    格式有点类似于kv键值对,用于定义一个变量并以在后面进行引用。这里的意思是定义了一个CATALINA_HOME变量,它所指的是/usr/local/tomcat的这个路径。图中的:

    WORKDIR $CATALINA_HOME

     这里是引用了这个CATALINA_HOME变量作为它的落脚点。 也就是上面提到的WORKDIR。这也正是tomcat的落脚点为啥会是/usr/local/tomcat的原因。


    八、ADD

    将宿主机目录下的文件拷贝到镜像。且会自动处理URL和解压tar压缩包。相当于下面的COPY加上一个解压功能。


    九、COPY

    拷贝文件和目录到镜像中。类似于docker基础命令中的cp。

    1. COPY ["src","dest"]
    2. #src:源文件或源目录
    3. #dest:容器内指定的路径,若所指定的路径不存在,则会自动创建好。

    十、VOLUME

    容器数据卷,相当于运行容器时的 -v 。关于容器数据卷的详解可以查看之间的博客:Docker容器数据卷


    十一、CMD

    指定容器在启动后要进行的操作。CMDRUN一样,也同样支持 shell exec 格式。

    1. CMD
    2. #shell格式
    3. CMD ["可执行文件","参数1","餐数2"]
    4. #exec格式
    5. CMD ["参数1","餐数2","餐数3"...]
    6. #参数列表格式

    这里新提到的 参数列表格式 :当在指定了ENTRYPOINT后,CMD用于指定具体参数。

    简单来说也就是在有了ENTRYPOINT之后,CMD就变成用来给它传参的了。

    一个DockerFile中可以有多个CMD指令,但是只有最后一个会生效。这里我们来看看tomcat的DockerFile最后两行:

    1. EXPOSE 8080
    2. CMD ["catalina.sh", "run"]

    先曝露出8080端口,然后最后一行是一个运行操作。若在后面继续添加一个CMD,则此处的 CMD ["catalina.sh", "run"] 将会直接失效。

    1.举个栗子

    docker run -it -p 8080:8080 tomcat:8 

    这回咱们正常启动,后面没有加之前bash

    然后我们去正常访问8080,可以正常看到咱们的猫猫(如果你访问8080报错404可以看看这篇:Docker容器安装Tomcat高版本,解决访问8080报错404):

    这里一切都是正常的。然后咱们去搞点事情

    咱们这回在后面给它加上 /bin/bash

    docker run -it -p 8080:8080 tomcat:8 /bin/bash
    

    这就相当于给它的DockerFile多加了一行,变成了以下的样子:

    1. EXPOSE 8080
    2. CMD ["catalina.sh", "run"]
    3. CMD ["/bin/bash","run"]

    咱们这时候再去看看8080的猫猫还在不在: 

    这时候猫猫就不见了(连不上8080)。 这也就是咱们上面提到的:CMD可以允许有多个,但是只有最后一个会正常执行,这里的 CMD ["/bin/bash","run"] 将之前的 CMD ["catalina.sh", "run"] 给覆盖了,所以猫猫不见了。

    2.CMD和RUN之间的区别

    CMD在docker run时运行

    RUN在docker build时运行


    十二、ENTRYPOINT

    同样也是定容器在启动后要进行的操作。与CMD类似,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当做参数传给ENTRYPOINT指定的程序。

    命令格式:

    ENTRYPOINT ["<可执行文件>","<参数1>","<参数2>"...]

     ENTRYPOINT 可以和 CMD 一起用,这里的  CMD 等于是在给 ENTRYPOINT 传参。

    简单来说 ENTRYPOINT 的优先级比 CMD 跟高一些,一起使用时会变成:

    <ENTRYPOINT>"<CMD>"

    1.举个栗子

    假设用DockerFile来构建Nginx的镜像:

    1. FROM nginx
    2. ENTRYPOINT ["nginx","-c"]
    3. #定参
    4. CMD ["/etc/nginx/nginx.conf"]
    5. #变参

    上述DockerFile衍生出的实际命令如下:

    nginx -c /etc/nginx/nginx.conf

    那如果在运行时添加了参数,如下:

    docker run  nginx -c /etc/nginx/new.conf

    这里因为在运行时,添加了一个新的conf,也就相当于在DockerFile中添加了一段新的CMD。咱们在上面有提到,CMD会被最后的CMD代替掉(也就是只有最后一个CMD能正常运行),那么以上代码在实际运行时其实如下:

    nginx -c /etc/nginx/new.conf

    即便在DockerFile中写了  ENTRYPOINT+CMD ,但是还是会被run后面新加的参数代替。

    2.优点

    在执行docker run的时候可以给ENTRYPOINT添加所需要的参数

    3.注意

    若DockerFile中存在多个ENTRYPOINT,仅最后一个生效


    举例

    零、需求和准备

    需求:使用DockerFile给CentOS镜像上添加vim+ifconfig+jdk8,启动一下(但是我这里建议各位在拉centos镜像的时候加上版本号7,后面会提到):

    docker run -it 5d0da3dc9764 /bin/bash

     咱么刚刚拉取下来的Centos镜像是不具备上述功能的,咱们查看一下:

    1. vim 1.txt
    2. ifconfig
    3. java -version

    我们现在去下一个jdk的gz包(随便选一个即可,这里我用的是171):jdk镜像下载


    一、编写Dockerfile文件

    在宿主机的根目录下创建一个新目录,叫做myfile然后使用xftp等工具将上面下载的包传进去:

    mkdir /myfile

     然后在此目录下用vim新建文件Dockerfile注意:这里的D要大写,f要小写

    vim Dockerfile

    注意点:因为CentOS8已经停止维护了,所以这里的第一行FROM后面需要加上7的版本号,否则后面会报错,将以下内容复制进去:

    1. FROM centos:7
    2. #基础镜像
    3. MAINTAINER van<123@123.com>
    4. #维护者和联系方式
    5. ENV MYPATH /usr/local
    6. WORKDIR $MYPATH
    7. #以变量的形式给到一个落脚点
    8. RUN yum -y install vim
    9. #安装vim编辑器
    10. RUN yum -y install net-tools
    11. #安装ifconfig命令查看网络IP
    12. RUN yum -y install glibc.i686
    13. RUN mkdir /usr/local/java
    14. #安装java8及lib库
    15. ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
    16. #ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
    17. ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
    18. ENV JRE_HOME $JAVA_HOME/jre
    19. ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    20. ENV PATH $JAVA_HOME/bin:$PATH
    21. #配置java环境变量
    22. EXPOSE 80
    23. #centos也不需要去曝露什么端口,这里是随便写的
    24. CMD echo $MYPATH
    25. CMD echo "success###############ok"
    26. CMD /bin/bash

    二、构建

    让在当前目录下进行构建:

    docker build -t centosjava8:1.5 .

    .号是指镜像构建时打包上传到Docker引擎中的文件的目录,不是本机目录。这里要注意的是:版本号后面有一个空格,之后再加上.

    过程可能会比较漫长,运行结果如下:

    可以看到,所有的Dockerfile指令都已经构建成功。

    咱们docker images查看一下:

    docker images

    我这里出现了一个虚悬镜像,留到下一篇博客再讲吧。已经写完了:Docker容器:虚悬镜像) 可以看到新的镜像大小有整整1.22个G比原先的200多M大了不少。运行一下(注意一下自己的镜像ID):

    docker run -it 24af206ac896 /bin/bash

    pwd查看一下落脚点在哪 

    pwd

    和我们之前设置的WORKDIR落脚点一致,没有问题。

    再来看看其它功能是否正常

    1. vim 1.txt
    2. ifconfig
    3. java -version

     试验成功!


    UnionFS联合文件系统

    这里我把整个构建的过程复制过来:

    1. [root@vanqiyeah myfile]# docker build -t centosjava8:1.5 .
    2. Sending build context to Docker daemon 190.9MB
    3. Step 1/17 : FROM centos:7
    4. 7: Pulling from library/centos
    5. 2d473b07cdd5: Pull complete
    6. Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
    7. Status: Downloaded newer image for centos:7
    8. ---> eeb6ee3f44bd
    9. Step 2/17 : MAINTAINER van<123@123.com>
    10. ---> Running in bedec783f19e
    11. Removing intermediate container bedec783f19e
    12. ---> 3d5b6d941195
    13. Step 3/17 : ENV MYPATH /usr/local
    14. ---> Running in f08acf892bbe
    15. Removing intermediate container f08acf892bbe
    16. ---> d892076f0380
    17. Step 4/17 : WORKDIR $MYPATH
    18. ---> Running in da6bfab459dc
    19. Removing intermediate container da6bfab459dc
    20. ---> a9b042242153
    21. Step 5/17 : RUN yum -y install vim
    22. ---> Running in 1f31b178d7b0
    23. Loaded plugins: fastestmirror, ovl
    24. Determining fastest mirrors
    25. * base: mirrors.cn99.com
    26. * extras: mirrors.nju.edu.cn
    27. * updates: mirrors.ustc.edu.cn
    28. Resolving Dependencies
    29. --> Running transaction check
    30. ---> Package vim-enhanced.x86_64 2:7.4.629-8.el7_9 will be installed
    31. --> Processing Dependency: vim-common = 2:7.4.629-8.el7_9 for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
    32. --> Processing Dependency: which for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
    33. --> Processing Dependency: perl(:MODULE_COMPAT_5.16.3) for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
    34. --> Processing Dependency: libperl.so()(64bit) for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
    35. --> Processing Dependency: libgpm.so.2()(64bit) for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
    36. --> Running transaction check
    37. ---> Package gpm-libs.x86_64 0:1.20.7-6.el7 will be installed
    38. ---> Package perl.x86_64 4:5.16.3-299.el7_9 will be installed
    39. --> Processing Dependency: perl(Socket) >= 1.3 for package: 4:perl-5.16.3-299.el7_9.x86_64
    40. --> Processing Dependency: perl(Scalar::Util) >= 1.10 for package: 4:perl-5.16.3-299.el7_9.x86_64
    41. --> Processing Dependency: perl-macros for package: 4:perl-5.16.3-299.el7_9.x86_64
    42. --> Processing Dependency: perl(threads::shared) for package: 4:perl-5.16.3-299.el7_9.x86_64
    43. --> Processing Dependency: perl(threads) for package: 4:perl-5.16.3-299.el7_9.x86_64
    44. --> Processing Dependency: perl(constant) for package: 4:perl-5.16.3-299.el7_9.x86_64
    45. --> Processing Dependency: perl(Time::Local) for package: 4:perl-5.16.3-299.el7_9.x86_64
    46. --> Processing Dependency: perl(Time::HiRes) for package: 4:perl-5.16.3-299.el7_9.x86_64
    47. --> Processing Dependency: perl(Storable) for package: 4:perl-5.16.3-299.el7_9.x86_64
    48. --> Processing Dependency: perl(Socket) for package: 4:perl-5.16.3-299.el7_9.x86_64
    49. --> Processing Dependency: perl(Scalar::Util) for package: 4:perl-5.16.3-299.el7_9.x86_64
    50. --> Processing Dependency: perl(Pod::Simple::XHTML) for package: 4:perl-5.16.3-299.el7_9.x86_64
    51. --> Processing Dependency: perl(Pod::Simple::Search) for package: 4:perl-5.16.3-299.el7_9.x86_64
    52. --> Processing Dependency: perl(Getopt::Long) for package: 4:perl-5.16.3-299.el7_9.x86_64
    53. --> Processing Dependency: perl(Filter::Util::Call) for package: 4:perl-5.16.3-299.el7_9.x86_64
    54. --> Processing Dependency: perl(File::Temp) for package: 4:perl-5.16.3-299.el7_9.x86_64
    55. --> Processing Dependency: perl(File::Spec::Unix) for package: 4:perl-5.16.3-299.el7_9.x86_64
    56. --> Processing Dependency: perl(File::Spec::Functions) for package: 4:perl-5.16.3-299.el7_9.x86_64
    57. --> Processing Dependency: perl(File::Spec) for package: 4:perl-5.16.3-299.el7_9.x86_64
    58. --> Processing Dependency: perl(File::Path) for package: 4:perl-5.16.3-299.el7_9.x86_64
    59. --> Processing Dependency: perl(Exporter) for package: 4:perl-5.16.3-299.el7_9.x86_64
    60. --> Processing Dependency: perl(Cwd) for package: 4:perl-5.16.3-299.el7_9.x86_64
    61. --> Processing Dependency: perl(Carp) for package: 4:perl-5.16.3-299.el7_9.x86_64
    62. ---> Package perl-libs.x86_64 4:5.16.3-299.el7_9 will be installed
    63. ---> Package vim-common.x86_64 2:7.4.629-8.el7_9 will be installed
    64. --> Processing Dependency: vim-filesystem for package: 2:vim-common-7.4.629-8.el7_9.x86_64
    65. ---> Package which.x86_64 0:2.20-7.el7 will be installed
    66. --> Running transaction check
    67. ---> Package perl-Carp.noarch 0:1.26-244.el7 will be installed
    68. ---> Package perl-Exporter.noarch 0:5.68-3.el7 will be installed
    69. ---> Package perl-File-Path.noarch 0:2.09-2.el7 will be installed
    70. ---> Package perl-File-Temp.noarch 0:0.23.01-3.el7 will be installed
    71. ---> Package perl-Filter.x86_64 0:1.49-3.el7 will be installed
    72. ---> Package perl-Getopt-Long.noarch 0:2.40-3.el7 will be installed
    73. --> Processing Dependency: perl(Pod::Usage) >= 1.14 for package: perl-Getopt-Long-2.40-3.el7.noarch
    74. --> Processing Dependency: perl(Text::ParseWords) for package: perl-Getopt-Long-2.40-3.el7.noarch
    75. ---> Package perl-PathTools.x86_64 0:3.40-5.el7 will be installed
    76. ---> Package perl-Pod-Simple.noarch 1:3.28-4.el7 will be installed
    77. --> Processing Dependency: perl(Pod::Escapes) >= 1.04 for package: 1:perl-Pod-Simple-3.28-4.el7.noarch
    78. --> Processing Dependency: perl(Encode) for package: 1:perl-Pod-Simple-3.28-4.el7.noarch
    79. ---> Package perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 will be installed
    80. ---> Package perl-Socket.x86_64 0:2.010-5.el7 will be installed
    81. ---> Package perl-Storable.x86_64 0:2.45-3.el7 will be installed
    82. ---> Package perl-Time-HiRes.x86_64 4:1.9725-3.el7 will be installed
    83. ---> Package perl-Time-Local.noarch 0:1.2300-2.el7 will be installed
    84. ---> Package perl-constant.noarch 0:1.27-2.el7 will be installed
    85. ---> Package perl-macros.x86_64 4:5.16.3-299.el7_9 will be installed
    86. ---> Package perl-threads.x86_64 0:1.87-4.el7 will be installed
    87. ---> Package perl-threads-shared.x86_64 0:1.43-6.el7 will be installed
    88. ---> Package vim-filesystem.x86_64 2:7.4.629-8.el7_9 will be installed
    89. --> Running transaction check
    90. ---> Package perl-Encode.x86_64 0:2.51-7.el7 will be installed
    91. ---> Package perl-Pod-Escapes.noarch 1:1.04-299.el7_9 will be installed
    92. ---> Package perl-Pod-Usage.noarch 0:1.63-3.el7 will be installed
    93. --> Processing Dependency: perl(Pod::Text) >= 3.15 for package: perl-Pod-Usage-1.63-3.el7.noarch
    94. --> Processing Dependency: perl-Pod-Perldoc for package: perl-Pod-Usage-1.63-3.el7.noarch
    95. ---> Package perl-Text-ParseWords.noarch 0:3.29-4.el7 will be installed
    96. --> Running transaction check
    97. ---> Package perl-Pod-Perldoc.noarch 0:3.20-4.el7 will be installed
    98. --> Processing Dependency: perl(parent) for package: perl-Pod-Perldoc-3.20-4.el7.noarch
    99. --> Processing Dependency: perl(HTTP::Tiny) for package: perl-Pod-Perldoc-3.20-4.el7.noarch
    100. --> Processing Dependency: groff-base for package: perl-Pod-Perldoc-3.20-4.el7.noarch
    101. ---> Package perl-podlators.noarch 0:2.5.1-3.el7 will be installed
    102. --> Running transaction check
    103. ---> Package groff-base.x86_64 0:1.22.2-8.el7 will be installed
    104. ---> Package perl-HTTP-Tiny.noarch 0:0.033-3.el7 will be installed
    105. ---> Package perl-parent.noarch 1:0.225-244.el7 will be installed
    106. --> Finished Dependency Resolution
    107. Dependencies Resolved
    108. ================================================================================
    109. Package Arch Version Repository Size
    110. ================================================================================
    111. Installing:
    112. vim-enhanced x86_64 2:7.4.629-8.el7_9 updates 1.1 M
    113. Installing for dependencies:
    114. gpm-libs x86_64 1.20.7-6.el7 base 32 k
    115. groff-base x86_64 1.22.2-8.el7 base 942 k
    116. perl x86_64 4:5.16.3-299.el7_9 updates 8.0 M
    117. perl-Carp noarch 1.26-244.el7 base 19 k
    118. perl-Encode x86_64 2.51-7.el7 base 1.5 M
    119. perl-Exporter noarch 5.68-3.el7 base 28 k
    120. perl-File-Path noarch 2.09-2.el7 base 26 k
    121. perl-File-Temp noarch 0.23.01-3.el7 base 56 k
    122. perl-Filter x86_64 1.49-3.el7 base 76 k
    123. perl-Getopt-Long noarch 2.40-3.el7 base 56 k
    124. perl-HTTP-Tiny noarch 0.033-3.el7 base 38 k
    125. perl-PathTools x86_64 3.40-5.el7 base 82 k
    126. perl-Pod-Escapes noarch 1:1.04-299.el7_9 updates 52 k
    127. perl-Pod-Perldoc noarch 3.20-4.el7 base 87 k
    128. perl-Pod-Simple noarch 1:3.28-4.el7 base 216 k
    129. perl-Pod-Usage noarch 1.63-3.el7 base 27 k
    130. perl-Scalar-List-Utils x86_64 1.27-248.el7 base 36 k
    131. perl-Socket x86_64 2.010-5.el7 base 49 k
    132. perl-Storable x86_64 2.45-3.el7 base 77 k
    133. perl-Text-ParseWords noarch 3.29-4.el7 base 14 k
    134. perl-Time-HiRes x86_64 4:1.9725-3.el7 base 45 k
    135. perl-Time-Local noarch 1.2300-2.el7 base 24 k
    136. perl-constant noarch 1.27-2.el7 base 19 k
    137. perl-libs x86_64 4:5.16.3-299.el7_9 updates 690 k
    138. perl-macros x86_64 4:5.16.3-299.el7_9 updates 44 k
    139. perl-parent noarch 1:0.225-244.el7 base 12 k
    140. perl-podlators noarch 2.5.1-3.el7 base 112 k
    141. perl-threads x86_64 1.87-4.el7 base 49 k
    142. perl-threads-shared x86_64 1.43-6.el7 base 39 k
    143. vim-common x86_64 2:7.4.629-8.el7_9 updates 5.9 M
    144. vim-filesystem x86_64 2:7.4.629-8.el7_9 updates 11 k
    145. which x86_64 2.20-7.el7 base 41 k
    146. Transaction Summary
    147. ================================================================================
    148. Install 1 Package (+32 Dependent packages)
    149. Total download size: 19 M
    150. Installed size: 63 M
    151. Downloading packages:
    152. warning: /var/cache/yum/x86_64/7/base/packages/gpm-libs-1.20.7-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
    153. Public key for gpm-libs-1.20.7-6.el7.x86_64.rpm is not installed
    154. Public key for perl-Pod-Escapes-1.04-299.el7_9.noarch.rpm is not installed
    155. --------------------------------------------------------------------------------
    156. Total 1.1 MB/s | 19 MB 00:16
    157. Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    158. Importing GPG key 0xF4A80EB5:
    159. Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) "
    160. Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
    161. Package : centos-release-7-9.2009.0.el7.centos.x86_64 (@CentOS)
    162. From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    163. Running transaction check
    164. Running transaction test
    165. Transaction test succeeded
    166. Running transaction
    167. Installing : gpm-libs-1.20.7-6.el7.x86_64 1/33
    168. Installing : 2:vim-filesystem-7.4.629-8.el7_9.x86_64 2/33
    169. Installing : 2:vim-common-7.4.629-8.el7_9.x86_64 3/33
    170. Installing : which-2.20-7.el7.x86_64 4/33
    171. install-info: No such file or directory for /usr/share/info/which.info.gz
    172. Installing : groff-base-1.22.2-8.el7.x86_64 5/33
    173. Installing : 1:perl-parent-0.225-244.el7.noarch 6/33
    174. Installing : perl-HTTP-Tiny-0.033-3.el7.noarch 7/33
    175. Installing : perl-podlators-2.5.1-3.el7.noarch 8/33
    176. Installing : perl-Pod-Perldoc-3.20-4.el7.noarch 9/33
    177. Installing : 1:perl-Pod-Escapes-1.04-299.el7_9.noarch 10/33
    178. Installing : perl-Encode-2.51-7.el7.x86_64 11/33
    179. Installing : perl-Text-ParseWords-3.29-4.el7.noarch 12/33
    180. Installing : perl-Pod-Usage-1.63-3.el7.noarch 13/33
    181. Installing : 4:perl-macros-5.16.3-299.el7_9.x86_64 14/33
    182. Installing : perl-Storable-2.45-3.el7.x86_64 15/33
    183. Installing : perl-Exporter-5.68-3.el7.noarch 16/33
    184. Installing : perl-constant-1.27-2.el7.noarch 17/33
    185. Installing : perl-Socket-2.010-5.el7.x86_64 18/33
    186. Installing : perl-Time-Local-1.2300-2.el7.noarch 19/33
    187. Installing : perl-Carp-1.26-244.el7.noarch 20/33
    188. Installing : perl-PathTools-3.40-5.el7.x86_64 21/33
    189. Installing : perl-Scalar-List-Utils-1.27-248.el7.x86_64 22/33
    190. Installing : 1:perl-Pod-Simple-3.28-4.el7.noarch 23/33
    191. Installing : perl-File-Temp-0.23.01-3.el7.noarch 24/33
    192. Installing : perl-File-Path-2.09-2.el7.noarch 25/33
    193. Installing : perl-threads-shared-1.43-6.el7.x86_64 26/33
    194. Installing : perl-threads-1.87-4.el7.x86_64 27/33
    195. Installing : 4:perl-Time-HiRes-1.9725-3.el7.x86_64 28/33
    196. Installing : perl-Filter-1.49-3.el7.x86_64 29/33
    197. Installing : 4:perl-libs-5.16.3-299.el7_9.x86_64 30/33
    198. Installing : perl-Getopt-Long-2.40-3.el7.noarch 31/33
    199. Installing : 4:perl-5.16.3-299.el7_9.x86_64 32/33
    200. Installing : 2:vim-enhanced-7.4.629-8.el7_9.x86_64 33/33
    201. Verifying : perl-HTTP-Tiny-0.033-3.el7.noarch 1/33
    202. Verifying : perl-threads-shared-1.43-6.el7.x86_64 2/33
    203. Verifying : perl-Storable-2.45-3.el7.x86_64 3/33
    204. Verifying : groff-base-1.22.2-8.el7.x86_64 4/33
    205. Verifying : perl-Exporter-5.68-3.el7.noarch 5/33
    206. Verifying : perl-constant-1.27-2.el7.noarch 6/33
    207. Verifying : perl-PathTools-3.40-5.el7.x86_64 7/33
    208. Verifying : 4:perl-macros-5.16.3-299.el7_9.x86_64 8/33
    209. Verifying : 2:vim-enhanced-7.4.629-8.el7_9.x86_64 9/33
    210. Verifying : 1:perl-parent-0.225-244.el7.noarch 10/33
    211. Verifying : perl-Socket-2.010-5.el7.x86_64 11/33
    212. Verifying : which-2.20-7.el7.x86_64 12/33
    213. Verifying : 2:vim-filesystem-7.4.629-8.el7_9.x86_64 13/33
    214. Verifying : perl-File-Temp-0.23.01-3.el7.noarch 14/33
    215. Verifying : 1:perl-Pod-Simple-3.28-4.el7.noarch 15/33
    216. Verifying : perl-Time-Local-1.2300-2.el7.noarch 16/33
    217. Verifying : 1:perl-Pod-Escapes-1.04-299.el7_9.noarch 17/33
    218. Verifying : perl-Carp-1.26-244.el7.noarch 18/33
    219. Verifying : 2:vim-common-7.4.629-8.el7_9.x86_64 19/33
    220. Verifying : perl-Scalar-List-Utils-1.27-248.el7.x86_64 20/33
    221. Verifying : perl-Pod-Usage-1.63-3.el7.noarch 21/33
    222. Verifying : perl-Encode-2.51-7.el7.x86_64 22/33
    223. Verifying : perl-Pod-Perldoc-3.20-4.el7.noarch 23/33
    224. Verifying : perl-podlators-2.5.1-3.el7.noarch 24/33
    225. Verifying : 4:perl-5.16.3-299.el7_9.x86_64 25/33
    226. Verifying : perl-File-Path-2.09-2.el7.noarch 26/33
    227. Verifying : perl-threads-1.87-4.el7.x86_64 27/33
    228. Verifying : 4:perl-Time-HiRes-1.9725-3.el7.x86_64 28/33
    229. Verifying : gpm-libs-1.20.7-6.el7.x86_64 29/33
    230. Verifying : perl-Filter-1.49-3.el7.x86_64 30/33
    231. Verifying : perl-Getopt-Long-2.40-3.el7.noarch 31/33
    232. Verifying : perl-Text-ParseWords-3.29-4.el7.noarch 32/33
    233. Verifying : 4:perl-libs-5.16.3-299.el7_9.x86_64 33/33
    234. Installed:
    235. vim-enhanced.x86_64 2:7.4.629-8.el7_9
    236. Dependency Installed:
    237. gpm-libs.x86_64 0:1.20.7-6.el7
    238. groff-base.x86_64 0:1.22.2-8.el7
    239. perl.x86_64 4:5.16.3-299.el7_9
    240. perl-Carp.noarch 0:1.26-244.el7
    241. perl-Encode.x86_64 0:2.51-7.el7
    242. perl-Exporter.noarch 0:5.68-3.el7
    243. perl-File-Path.noarch 0:2.09-2.el7
    244. perl-File-Temp.noarch 0:0.23.01-3.el7
    245. perl-Filter.x86_64 0:1.49-3.el7
    246. perl-Getopt-Long.noarch 0:2.40-3.el7
    247. perl-HTTP-Tiny.noarch 0:0.033-3.el7
    248. perl-PathTools.x86_64 0:3.40-5.el7
    249. perl-Pod-Escapes.noarch 1:1.04-299.el7_9
    250. perl-Pod-Perldoc.noarch 0:3.20-4.el7
    251. perl-Pod-Simple.noarch 1:3.28-4.el7
    252. perl-Pod-Usage.noarch 0:1.63-3.el7
    253. perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
    254. perl-Socket.x86_64 0:2.010-5.el7
    255. perl-Storable.x86_64 0:2.45-3.el7
    256. perl-Text-ParseWords.noarch 0:3.29-4.el7
    257. perl-Time-HiRes.x86_64 4:1.9725-3.el7
    258. perl-Time-Local.noarch 0:1.2300-2.el7
    259. perl-constant.noarch 0:1.27-2.el7
    260. perl-libs.x86_64 4:5.16.3-299.el7_9
    261. perl-macros.x86_64 4:5.16.3-299.el7_9
    262. perl-parent.noarch 1:0.225-244.el7
    263. perl-podlators.noarch 0:2.5.1-3.el7
    264. perl-threads.x86_64 0:1.87-4.el7
    265. perl-threads-shared.x86_64 0:1.43-6.el7
    266. vim-common.x86_64 2:7.4.629-8.el7_9
    267. vim-filesystem.x86_64 2:7.4.629-8.el7_9
    268. which.x86_64 0:2.20-7.el7
    269. Complete!
    270. Removing intermediate container 1f31b178d7b0
    271. ---> 636ad52d5f4e
    272. Step 6/17 : RUN yum -y install net-tools
    273. ---> Running in 231811e49297
    274. Loaded plugins: fastestmirror, ovl
    275. Loading mirror speeds from cached hostfile
    276. * base: mirrors.cn99.com
    277. * extras: mirrors.nju.edu.cn
    278. * updates: mirrors.ustc.edu.cn
    279. Resolving Dependencies
    280. --> Running transaction check
    281. ---> Package net-tools.x86_64 0:2.0-0.25.20131004git.el7 will be installed
    282. --> Finished Dependency Resolution
    283. Dependencies Resolved
    284. ================================================================================
    285. Package Arch Version Repository Size
    286. ================================================================================
    287. Installing:
    288. net-tools x86_64 2.0-0.25.20131004git.el7 base 306 k
    289. Transaction Summary
    290. ================================================================================
    291. Install 1 Package
    292. Total download size: 306 k
    293. Installed size: 917 k
    294. Downloading packages:
    295. Running transaction check
    296. Running transaction test
    297. Transaction test succeeded
    298. Running transaction
    299. Installing : net-tools-2.0-0.25.20131004git.el7.x86_64 1/1
    300. Verifying : net-tools-2.0-0.25.20131004git.el7.x86_64 1/1
    301. Installed:
    302. net-tools.x86_64 0:2.0-0.25.20131004git.el7
    303. Complete!
    304. Removing intermediate container 231811e49297
    305. ---> e7d6bb4a5865
    306. Step 7/17 : RUN yum -y install glibc.i686
    307. ---> Running in 7d5529db79c6
    308. Loaded plugins: fastestmirror, ovl
    309. Loading mirror speeds from cached hostfile
    310. * base: mirrors.cn99.com
    311. * extras: mirrors.nju.edu.cn
    312. * updates: mirrors.ustc.edu.cn
    313. Resolving Dependencies
    314. --> Running transaction check
    315. ---> Package glibc.i686 0:2.17-326.el7_9 will be installed
    316. --> Processing Dependency: glibc-common = 2.17-326.el7_9 for package: glibc-2.17-326.el7_9.i686
    317. --> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.17-326.el7_9.i686
    318. --> Processing Dependency: libfreebl3.so for package: glibc-2.17-326.el7_9.i686
    319. --> Running transaction check
    320. ---> Package glibc-common.x86_64 0:2.17-317.el7 will be updated
    321. --> Processing Dependency: glibc-common = 2.17-317.el7 for package: glibc-2.17-317.el7.x86_64
    322. ---> Package glibc-common.x86_64 0:2.17-326.el7_9 will be an update
    323. ---> Package nss-softokn-freebl.x86_64 0:3.53.1-6.el7_9 will be updated
    324. ---> Package nss-softokn-freebl.i686 0:3.67.0-3.el7_9 will be installed
    325. --> Processing Dependency: nss-util >= 3.67.0-1 for package: nss-softokn-freebl-3.67.0-3.el7_9.i686
    326. --> Processing Dependency: nspr >= 4.30.0 for package: nss-softokn-freebl-3.67.0-3.el7_9.i686
    327. ---> Package nss-softokn-freebl.x86_64 0:3.67.0-3.el7_9 will be an update
    328. --> Running transaction check
    329. ---> Package glibc.x86_64 0:2.17-317.el7 will be updated
    330. ---> Package glibc.x86_64 0:2.17-326.el7_9 will be an update
    331. ---> Package nspr.x86_64 0:4.25.0-2.el7_9 will be updated
    332. ---> Package nspr.x86_64 0:4.32.0-1.el7_9 will be an update
    333. ---> Package nss-util.x86_64 0:3.53.1-1.el7_9 will be updated
    334. ---> Package nss-util.x86_64 0:3.67.0-1.el7_9 will be an update
    335. --> Finished Dependency Resolution
    336. Dependencies Resolved
    337. ================================================================================
    338. Package Arch Version Repository Size
    339. ================================================================================
    340. Installing:
    341. glibc i686 2.17-326.el7_9 updates 4.3 M
    342. Installing for dependencies:
    343. nss-softokn-freebl i686 3.67.0-3.el7_9 updates 325 k
    344. Updating for dependencies:
    345. glibc x86_64 2.17-326.el7_9 updates 3.6 M
    346. glibc-common x86_64 2.17-326.el7_9 updates 12 M
    347. nspr x86_64 4.32.0-1.el7_9 updates 127 k
    348. nss-softokn-freebl x86_64 3.67.0-3.el7_9 updates 337 k
    349. nss-util x86_64 3.67.0-1.el7_9 updates 79 k
    350. Transaction Summary
    351. ================================================================================
    352. Install 1 Package (+1 Dependent package)
    353. Upgrade ( 5 Dependent packages)
    354. Total download size: 20 M
    355. Downloading packages:
    356. Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
    357. --------------------------------------------------------------------------------
    358. Total 35 kB/s | 20 MB 09:45
    359. Running transaction check
    360. Running transaction test
    361. Transaction test succeeded
    362. Running transaction
    363. Updating : nss-softokn-freebl-3.67.0-3.el7_9.x86_64 1/12
    364. Updating : glibc-common-2.17-326.el7_9.x86_64 2/12
    365. Updating : glibc-2.17-326.el7_9.x86_64 3/12
    366. Updating : nspr-4.32.0-1.el7_9.x86_64 4/12
    367. Updating : nss-util-3.67.0-1.el7_9.x86_64 5/12
    368. Installing : nss-softokn-freebl-3.67.0-3.el7_9.i686 6/12
    369. Installing : glibc-2.17-326.el7_9.i686 7/12
    370. Cleanup : nspr-4.25.0-2.el7_9.x86_64 8/12
    371. Cleanup : nss-util-3.53.1-1.el7_9.x86_64 9/12
    372. Cleanup : nss-softokn-freebl-3.53.1-6.el7_9.x86_64 10/12
    373. Cleanup : glibc-common-2.17-317.el7.x86_64 11/12
    374. Cleanup : glibc-2.17-317.el7.x86_64 12/12
    375. Verifying : glibc-common-2.17-326.el7_9.x86_64 1/12
    376. Verifying : nss-softokn-freebl-3.67.0-3.el7_9.x86_64 2/12
    377. Verifying : glibc-2.17-326.el7_9.x86_64 3/12
    378. Verifying : nss-util-3.67.0-1.el7_9.x86_64 4/12
    379. Verifying : nspr-4.32.0-1.el7_9.x86_64 5/12
    380. Verifying : glibc-2.17-326.el7_9.i686 6/12
    381. Verifying : nss-softokn-freebl-3.67.0-3.el7_9.i686 7/12
    382. Verifying : glibc-2.17-317.el7.x86_64 8/12
    383. Verifying : glibc-common-2.17-317.el7.x86_64 9/12
    384. Verifying : nspr-4.25.0-2.el7_9.x86_64 10/12
    385. Verifying : nss-softokn-freebl-3.53.1-6.el7_9.x86_64 11/12
    386. Verifying : nss-util-3.53.1-1.el7_9.x86_64 12/12
    387. Installed:
    388. glibc.i686 0:2.17-326.el7_9
    389. Dependency Installed:
    390. nss-softokn-freebl.i686 0:3.67.0-3.el7_9
    391. Dependency Updated:
    392. glibc.x86_64 0:2.17-326.el7_9 glibc-common.x86_64 0:2.17-326.el7_9
    393. nspr.x86_64 0:4.32.0-1.el7_9 nss-softokn-freebl.x86_64 0:3.67.0-3.el7_9
    394. nss-util.x86_64 0:3.67.0-1.el7_9
    395. Complete!
    396. Removing intermediate container 7d5529db79c6
    397. ---> 12d42a5b6004
    398. Step 8/17 : RUN mkdir /usr/local/java
    399. ---> Running in 3e8a6abff8e2
    400. Removing intermediate container 3e8a6abff8e2
    401. ---> f4c3fd2bae1f
    402. Step 9/17 : ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
    403. ---> 440a6bd6da61
    404. Step 10/17 : ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
    405. ---> Running in 24bc3cb8bd04
    406. Removing intermediate container 24bc3cb8bd04
    407. ---> 13c4ca55f35e
    408. Step 11/17 : ENV JRE_HOME $JAVA_HOME/jre
    409. ---> Running in 782b9bbf4d78
    410. Removing intermediate container 782b9bbf4d78
    411. ---> f9051f305225
    412. Step 12/17 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    413. ---> Running in 937c1030ddd1
    414. Removing intermediate container 937c1030ddd1
    415. ---> d9d89b3a80e0
    416. Step 13/17 : ENV PATH $JAVA_HOME/bin:$PATH
    417. ---> Running in 92d4091fcb25
    418. Removing intermediate container 92d4091fcb25
    419. ---> 3e3fe4a7e8ee
    420. Step 14/17 : EXPOSE 80
    421. ---> Running in 3478980aa8b5
    422. Removing intermediate container 3478980aa8b5
    423. ---> 370ac0bf88e2
    424. Step 15/17 : CMD echo $MYPATH
    425. ---> Running in eeb80d74b277
    426. Removing intermediate container eeb80d74b277
    427. ---> 7c81a14e5fff
    428. Step 16/17 : CMD echo "success###############ok"
    429. ---> Running in bfb99fd052de
    430. Removing intermediate container bfb99fd052de
    431. ---> 94dc9fe4a32f
    432. Step 17/17 : CMD /bin/bash
    433. ---> Running in f5e3b73e37ec
    434. Removing intermediate container f5e3b73e37ec
    435. ---> 24af206ac896
    436. Successfully built 24af206ac896
    437. Successfully tagged centosjava8:1.5

    UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

    回头看看构建过程中的17个步骤, 再自行体会一下什么是联合文件系统。

  • 相关阅读:
    【C++笔试强训】第五天
    【逆向】在程序空白区添加Shellcode
    TVC广告片存在的商业价值
    关于 C/C++ 中的 switch 语句,您可能不知道
    swift UITextField 设置leftView不生效
    Linux安装Mysql主从集群(图文解说详细版)
    MySQL 行级锁(行锁、临键锁、间隙锁)
    基于Python的卷积神经网络的猫狗图像识别系统
    【go】linux服务器 go从1.18.x版本升级1.19.x
    指针笔试题(带解析版)
  • 原文地址:https://blog.csdn.net/Trollz/article/details/126072964