目录
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内容如下:
...此处省略...
FROM amazoncorretto:8-al2-jdk
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
# let "Tomcat Native" live somewhere isolated
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR
# see https://www.apache.org/dist/tomcat/tomcat-10/KEYS
# see also "versions.sh" (https://github.com/docker-library/tomcat/blob/master/versions.sh)
ENV GPG_KEYS A9C5DF4D22E99998D9875A5110C01C5A2F6059E7
ENV TOMCAT_MAJOR 10
ENV TOMCAT_VERSION 10.0.23
ENV TOMCAT_SHA512 0e0263e8280f2ccfb4bef916444a6105fef689a3d95c334c8a7bfe59f1e3966d48ea624727f1818a4df331a603f1ac5e21b908dda3cae676ddc1aef90c2d12ab
...内容过多,此处省略...
# verify Tomcat Native is working properly
RUN set -eux; \
nativeLines="$(catalina.sh configtest 2>&1)"; \
nativeLines="$(echo "$nativeLines" | grep 'Apache Tomcat Native')"; \
nativeLines="$(echo "$nativeLines" | sort -u)"; \
if ! echo "$nativeLines" | grep -E 'INFO: Loaded( APR based)? Apache Tomcat Native library' >&2; then \
echo >&2 "$nativeLines"; \
exit 1; \
fi
EXPOSE 8080
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
RUN <命令行命令>
<命令行命令>等同于在终端中的shell命令
例子:
当我们要在容器中添加一个vim功能时,要使用到yum。而以下的命令则是告诉你:在基础镜像之上,我们添加了一个安装vim的功能。
RUN yum -y install vim
2.exec
RUN ["可执行文件","参数1","参数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。
COPY ["src","dest"]
#src:源文件或源目录
#dest:容器内指定的路径,若所指定的路径不存在,则会自动创建好。
十、VOLUME
容器数据卷,相当于运行容器时的 -v 。关于容器数据卷的详解可以查看之间的博客:Docker容器数据卷
十一、CMD
指定容器在启动后要进行的操作。CMD和RUN一样,也同样支持 shell 和 exec 格式。
CMD <shell命令>
#shell格式
CMD ["可执行文件","参数1","餐数2"]
#exec格式
CMD ["参数1","餐数2","餐数3"...]
#参数列表格式
这里新提到的 参数列表格式 :当在指定了ENTRYPOINT后,CMD用于指定具体参数。
简单来说也就是在有了ENTRYPOINT之后,CMD就变成用来给它传参的了。
一个DockerFile中可以有多个CMD指令,但是只有最后一个会生效。这里我们来看看tomcat的DockerFile最后两行:
EXPOSE 8080
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多加了一行,变成了以下的样子:
EXPOSE 8080
CMD ["catalina.sh", "run"]
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的镜像:
FROM nginx
ENTRYPOINT ["nginx","-c"]
#定参
CMD ["/etc/nginx/nginx.conf"]
#变参
上述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镜像是不具备上述功能的,咱们查看一下:
vim 1.txt
ifconfig
java -version
我们现在去下一个jdk的gz包(随便选一个即可,这里我用的是171):jdk镜像下载
一、编写Dockerfile文件
在宿主机的根目录下创建一个新目录,叫做myfile然后使用xftp等工具将上面下载的包传进去:
mkdir /myfile
然后在此目录下用vim新建文件Dockerfile,注意:这里的D要大写,f要小写:
vim Dockerfile
注意点:因为CentOS8已经停止维护了,所以这里的第一行FROM后面需要加上7的版本号,否则后面会报错,将以下内容复制进去:
FROM centos:7
#基础镜像
MAINTAINER van<123@123.com>
#维护者和联系方式
ENV MYPATH /usr/local
WORKDIR $MYPATH
#以变量的形式给到一个落脚点
RUN yum -y install vim
#安装vim编辑器
RUN yum -y install net-tools
#安装ifconfig命令查看网络IP
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#安装java8及lib库
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
#配置java环境变量
EXPOSE 80
#centos也不需要去曝露什么端口,这里是随便写的
CMD echo $MYPATH
CMD echo "success###############ok"
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落脚点一致,没有问题。
再来看看其它功能是否正常
vim 1.txt
ifconfig
java -version
试验成功!
UnionFS联合文件系统
这里我把整个构建的过程复制过来:
[root@vanqiyeah myfile]# docker build -t centosjava8:1.5 .
Sending build context to Docker daemon 190.9MB
Step 1/17 : FROM centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7
---> eeb6ee3f44bd
Step 2/17 : MAINTAINER van<123@123.com>
---> Running in bedec783f19e
Removing intermediate container bedec783f19e
---> 3d5b6d941195
Step 3/17 : ENV MYPATH /usr/local
---> Running in f08acf892bbe
Removing intermediate container f08acf892bbe
---> d892076f0380
Step 4/17 : WORKDIR $MYPATH
---> Running in da6bfab459dc
Removing intermediate container da6bfab459dc
---> a9b042242153
Step 5/17 : RUN yum -y install vim
---> Running in 1f31b178d7b0
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: mirrors.cn99.com
* extras: mirrors.nju.edu.cn
* updates: mirrors.ustc.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package vim-enhanced.x86_64 2:7.4.629-8.el7_9 will be installed
--> Processing Dependency: vim-common = 2:7.4.629-8.el7_9 for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
--> Processing Dependency: which for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
--> Processing Dependency: perl(:MODULE_COMPAT_5.16.3) for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
--> Processing Dependency: libperl.so()(64bit) for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
--> Processing Dependency: libgpm.so.2()(64bit) for package: 2:vim-enhanced-7.4.629-8.el7_9.x86_64
--> Running transaction check
---> Package gpm-libs.x86_64 0:1.20.7-6.el7 will be installed
---> Package perl.x86_64 4:5.16.3-299.el7_9 will be installed
--> Processing Dependency: perl(Socket) >= 1.3 for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Scalar::Util) >= 1.10 for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl-macros for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(threads::shared) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(threads) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(constant) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Time::Local) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Time::HiRes) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Storable) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Socket) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Scalar::Util) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Pod::Simple::XHTML) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Pod::Simple::Search) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Getopt::Long) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Filter::Util::Call) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(File::Temp) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(File::Spec::Unix) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(File::Spec::Functions) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(File::Spec) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(File::Path) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Exporter) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Cwd) for package: 4:perl-5.16.3-299.el7_9.x86_64
--> Processing Dependency: perl(Carp) for package: 4:perl-5.16.3-299.el7_9.x86_64
---> Package perl-libs.x86_64 4:5.16.3-299.el7_9 will be installed
---> Package vim-common.x86_64 2:7.4.629-8.el7_9 will be installed
--> Processing Dependency: vim-filesystem for package: 2:vim-common-7.4.629-8.el7_9.x86_64
---> Package which.x86_64 0:2.20-7.el7 will be installed
--> Running transaction check
---> Package perl-Carp.noarch 0:1.26-244.el7 will be installed
---> Package perl-Exporter.noarch 0:5.68-3.el7 will be installed
---> Package perl-File-Path.noarch 0:2.09-2.el7 will be installed
---> Package perl-File-Temp.noarch 0:0.23.01-3.el7 will be installed
---> Package perl-Filter.x86_64 0:1.49-3.el7 will be installed
---> Package perl-Getopt-Long.noarch 0:2.40-3.el7 will be installed
--> Processing Dependency: perl(Pod::Usage) >= 1.14 for package: perl-Getopt-Long-2.40-3.el7.noarch
--> Processing Dependency: perl(Text::ParseWords) for package: perl-Getopt-Long-2.40-3.el7.noarch
---> Package perl-PathTools.x86_64 0:3.40-5.el7 will be installed
---> Package perl-Pod-Simple.noarch 1:3.28-4.el7 will be installed
--> Processing Dependency: perl(Pod::Escapes) >= 1.04 for package: 1:perl-Pod-Simple-3.28-4.el7.noarch
--> Processing Dependency: perl(Encode) for package: 1:perl-Pod-Simple-3.28-4.el7.noarch
---> Package perl-Scalar-List-Utils.x86_64 0:1.27-248.el7 will be installed
---> Package perl-Socket.x86_64 0:2.010-5.el7 will be installed
---> Package perl-Storable.x86_64 0:2.45-3.el7 will be installed
---> Package perl-Time-HiRes.x86_64 4:1.9725-3.el7 will be installed
---> Package perl-Time-Local.noarch 0:1.2300-2.el7 will be installed
---> Package perl-constant.noarch 0:1.27-2.el7 will be installed
---> Package perl-macros.x86_64 4:5.16.3-299.el7_9 will be installed
---> Package perl-threads.x86_64 0:1.87-4.el7 will be installed
---> Package perl-threads-shared.x86_64 0:1.43-6.el7 will be installed
---> Package vim-filesystem.x86_64 2:7.4.629-8.el7_9 will be installed
--> Running transaction check
---> Package perl-Encode.x86_64 0:2.51-7.el7 will be installed
---> Package perl-Pod-Escapes.noarch 1:1.04-299.el7_9 will be installed
---> Package perl-Pod-Usage.noarch 0:1.63-3.el7 will be installed
--> Processing Dependency: perl(Pod::Text) >= 3.15 for package: perl-Pod-Usage-1.63-3.el7.noarch
--> Processing Dependency: perl-Pod-Perldoc for package: perl-Pod-Usage-1.63-3.el7.noarch
---> Package perl-Text-ParseWords.noarch 0:3.29-4.el7 will be installed
--> Running transaction check
---> Package perl-Pod-Perldoc.noarch 0:3.20-4.el7 will be installed
--> Processing Dependency: perl(parent) for package: perl-Pod-Perldoc-3.20-4.el7.noarch
--> Processing Dependency: perl(HTTP::Tiny) for package: perl-Pod-Perldoc-3.20-4.el7.noarch
--> Processing Dependency: groff-base for package: perl-Pod-Perldoc-3.20-4.el7.noarch
---> Package perl-podlators.noarch 0:2.5.1-3.el7 will be installed
--> Running transaction check
---> Package groff-base.x86_64 0:1.22.2-8.el7 will be installed
---> Package perl-HTTP-Tiny.noarch 0:0.033-3.el7 will be installed
---> Package perl-parent.noarch 1:0.225-244.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:7.4.629-8.el7_9 updates 1.1 M
Installing for dependencies:
gpm-libs x86_64 1.20.7-6.el7 base 32 k
groff-base x86_64 1.22.2-8.el7 base 942 k
perl x86_64 4:5.16.3-299.el7_9 updates 8.0 M
perl-Carp noarch 1.26-244.el7 base 19 k
perl-Encode x86_64 2.51-7.el7 base 1.5 M
perl-Exporter noarch 5.68-3.el7 base 28 k
perl-File-Path noarch 2.09-2.el7 base 26 k
perl-File-Temp noarch 0.23.01-3.el7 base 56 k
perl-Filter x86_64 1.49-3.el7 base 76 k
perl-Getopt-Long noarch 2.40-3.el7 base 56 k
perl-HTTP-Tiny noarch 0.033-3.el7 base 38 k
perl-PathTools x86_64 3.40-5.el7 base 82 k
perl-Pod-Escapes noarch 1:1.04-299.el7_9 updates 52 k
perl-Pod-Perldoc noarch 3.20-4.el7 base 87 k
perl-Pod-Simple noarch 1:3.28-4.el7 base 216 k
perl-Pod-Usage noarch 1.63-3.el7 base 27 k
perl-Scalar-List-Utils x86_64 1.27-248.el7 base 36 k
perl-Socket x86_64 2.010-5.el7 base 49 k
perl-Storable x86_64 2.45-3.el7 base 77 k
perl-Text-ParseWords noarch 3.29-4.el7 base 14 k
perl-Time-HiRes x86_64 4:1.9725-3.el7 base 45 k
perl-Time-Local noarch 1.2300-2.el7 base 24 k
perl-constant noarch 1.27-2.el7 base 19 k
perl-libs x86_64 4:5.16.3-299.el7_9 updates 690 k
perl-macros x86_64 4:5.16.3-299.el7_9 updates 44 k
perl-parent noarch 1:0.225-244.el7 base 12 k
perl-podlators noarch 2.5.1-3.el7 base 112 k
perl-threads x86_64 1.87-4.el7 base 49 k
perl-threads-shared x86_64 1.43-6.el7 base 39 k
vim-common x86_64 2:7.4.629-8.el7_9 updates 5.9 M
vim-filesystem x86_64 2:7.4.629-8.el7_9 updates 11 k
which x86_64 2.20-7.el7 base 41 k
Transaction Summary
================================================================================
Install 1 Package (+32 Dependent packages)
Total download size: 19 M
Installed size: 63 M
Downloading packages:
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
Public key for gpm-libs-1.20.7-6.el7.x86_64.rpm is not installed
Public key for perl-Pod-Escapes-1.04-299.el7_9.noarch.rpm is not installed
--------------------------------------------------------------------------------
Total 1.1 MB/s | 19 MB 00:16
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-9.2009.0.el7.centos.x86_64 (@CentOS)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : gpm-libs-1.20.7-6.el7.x86_64 1/33
Installing : 2:vim-filesystem-7.4.629-8.el7_9.x86_64 2/33
Installing : 2:vim-common-7.4.629-8.el7_9.x86_64 3/33
Installing : which-2.20-7.el7.x86_64 4/33
install-info: No such file or directory for /usr/share/info/which.info.gz
Installing : groff-base-1.22.2-8.el7.x86_64 5/33
Installing : 1:perl-parent-0.225-244.el7.noarch 6/33
Installing : perl-HTTP-Tiny-0.033-3.el7.noarch 7/33
Installing : perl-podlators-2.5.1-3.el7.noarch 8/33
Installing : perl-Pod-Perldoc-3.20-4.el7.noarch 9/33
Installing : 1:perl-Pod-Escapes-1.04-299.el7_9.noarch 10/33
Installing : perl-Encode-2.51-7.el7.x86_64 11/33
Installing : perl-Text-ParseWords-3.29-4.el7.noarch 12/33
Installing : perl-Pod-Usage-1.63-3.el7.noarch 13/33
Installing : 4:perl-macros-5.16.3-299.el7_9.x86_64 14/33
Installing : perl-Storable-2.45-3.el7.x86_64 15/33
Installing : perl-Exporter-5.68-3.el7.noarch 16/33
Installing : perl-constant-1.27-2.el7.noarch 17/33
Installing : perl-Socket-2.010-5.el7.x86_64 18/33
Installing : perl-Time-Local-1.2300-2.el7.noarch 19/33
Installing : perl-Carp-1.26-244.el7.noarch 20/33
Installing : perl-PathTools-3.40-5.el7.x86_64 21/33
Installing : perl-Scalar-List-Utils-1.27-248.el7.x86_64 22/33
Installing : 1:perl-Pod-Simple-3.28-4.el7.noarch 23/33
Installing : perl-File-Temp-0.23.01-3.el7.noarch 24/33
Installing : perl-File-Path-2.09-2.el7.noarch 25/33
Installing : perl-threads-shared-1.43-6.el7.x86_64 26/33
Installing : perl-threads-1.87-4.el7.x86_64 27/33
Installing : 4:perl-Time-HiRes-1.9725-3.el7.x86_64 28/33
Installing : perl-Filter-1.49-3.el7.x86_64 29/33
Installing : 4:perl-libs-5.16.3-299.el7_9.x86_64 30/33
Installing : perl-Getopt-Long-2.40-3.el7.noarch 31/33
Installing : 4:perl-5.16.3-299.el7_9.x86_64 32/33
Installing : 2:vim-enhanced-7.4.629-8.el7_9.x86_64 33/33
Verifying : perl-HTTP-Tiny-0.033-3.el7.noarch 1/33
Verifying : perl-threads-shared-1.43-6.el7.x86_64 2/33
Verifying : perl-Storable-2.45-3.el7.x86_64 3/33
Verifying : groff-base-1.22.2-8.el7.x86_64 4/33
Verifying : perl-Exporter-5.68-3.el7.noarch 5/33
Verifying : perl-constant-1.27-2.el7.noarch 6/33
Verifying : perl-PathTools-3.40-5.el7.x86_64 7/33
Verifying : 4:perl-macros-5.16.3-299.el7_9.x86_64 8/33
Verifying : 2:vim-enhanced-7.4.629-8.el7_9.x86_64 9/33
Verifying : 1:perl-parent-0.225-244.el7.noarch 10/33
Verifying : perl-Socket-2.010-5.el7.x86_64 11/33
Verifying : which-2.20-7.el7.x86_64 12/33
Verifying : 2:vim-filesystem-7.4.629-8.el7_9.x86_64 13/33
Verifying : perl-File-Temp-0.23.01-3.el7.noarch 14/33
Verifying : 1:perl-Pod-Simple-3.28-4.el7.noarch 15/33
Verifying : perl-Time-Local-1.2300-2.el7.noarch 16/33
Verifying : 1:perl-Pod-Escapes-1.04-299.el7_9.noarch 17/33
Verifying : perl-Carp-1.26-244.el7.noarch 18/33
Verifying : 2:vim-common-7.4.629-8.el7_9.x86_64 19/33
Verifying : perl-Scalar-List-Utils-1.27-248.el7.x86_64 20/33
Verifying : perl-Pod-Usage-1.63-3.el7.noarch 21/33
Verifying : perl-Encode-2.51-7.el7.x86_64 22/33
Verifying : perl-Pod-Perldoc-3.20-4.el7.noarch 23/33
Verifying : perl-podlators-2.5.1-3.el7.noarch 24/33
Verifying : 4:perl-5.16.3-299.el7_9.x86_64 25/33
Verifying : perl-File-Path-2.09-2.el7.noarch 26/33
Verifying : perl-threads-1.87-4.el7.x86_64 27/33
Verifying : 4:perl-Time-HiRes-1.9725-3.el7.x86_64 28/33
Verifying : gpm-libs-1.20.7-6.el7.x86_64 29/33
Verifying : perl-Filter-1.49-3.el7.x86_64 30/33
Verifying : perl-Getopt-Long-2.40-3.el7.noarch 31/33
Verifying : perl-Text-ParseWords-3.29-4.el7.noarch 32/33
Verifying : 4:perl-libs-5.16.3-299.el7_9.x86_64 33/33
Installed:
vim-enhanced.x86_64 2:7.4.629-8.el7_9
Dependency Installed:
gpm-libs.x86_64 0:1.20.7-6.el7
groff-base.x86_64 0:1.22.2-8.el7
perl.x86_64 4:5.16.3-299.el7_9
perl-Carp.noarch 0:1.26-244.el7
perl-Encode.x86_64 0:2.51-7.el7
perl-Exporter.noarch 0:5.68-3.el7
perl-File-Path.noarch 0:2.09-2.el7
perl-File-Temp.noarch 0:0.23.01-3.el7
perl-Filter.x86_64 0:1.49-3.el7
perl-Getopt-Long.noarch 0:2.40-3.el7
perl-HTTP-Tiny.noarch 0:0.033-3.el7
perl-PathTools.x86_64 0:3.40-5.el7
perl-Pod-Escapes.noarch 1:1.04-299.el7_9
perl-Pod-Perldoc.noarch 0:3.20-4.el7
perl-Pod-Simple.noarch 1:3.28-4.el7
perl-Pod-Usage.noarch 0:1.63-3.el7
perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
perl-Socket.x86_64 0:2.010-5.el7
perl-Storable.x86_64 0:2.45-3.el7
perl-Text-ParseWords.noarch 0:3.29-4.el7
perl-Time-HiRes.x86_64 4:1.9725-3.el7
perl-Time-Local.noarch 0:1.2300-2.el7
perl-constant.noarch 0:1.27-2.el7
perl-libs.x86_64 4:5.16.3-299.el7_9
perl-macros.x86_64 4:5.16.3-299.el7_9
perl-parent.noarch 1:0.225-244.el7
perl-podlators.noarch 0:2.5.1-3.el7
perl-threads.x86_64 0:1.87-4.el7
perl-threads-shared.x86_64 0:1.43-6.el7
vim-common.x86_64 2:7.4.629-8.el7_9
vim-filesystem.x86_64 2:7.4.629-8.el7_9
which.x86_64 0:2.20-7.el7
Complete!
Removing intermediate container 1f31b178d7b0
---> 636ad52d5f4e
Step 6/17 : RUN yum -y install net-tools
---> Running in 231811e49297
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirrors.cn99.com
* extras: mirrors.nju.edu.cn
* updates: mirrors.ustc.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package net-tools.x86_64 0:2.0-0.25.20131004git.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.25.20131004git.el7 base 306 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 306 k
Installed size: 917 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : net-tools-2.0-0.25.20131004git.el7.x86_64 1/1
Verifying : net-tools-2.0-0.25.20131004git.el7.x86_64 1/1
Installed:
net-tools.x86_64 0:2.0-0.25.20131004git.el7
Complete!
Removing intermediate container 231811e49297
---> e7d6bb4a5865
Step 7/17 : RUN yum -y install glibc.i686
---> Running in 7d5529db79c6
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirrors.cn99.com
* extras: mirrors.nju.edu.cn
* updates: mirrors.ustc.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package glibc.i686 0:2.17-326.el7_9 will be installed
--> Processing Dependency: glibc-common = 2.17-326.el7_9 for package: glibc-2.17-326.el7_9.i686
--> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.17-326.el7_9.i686
--> Processing Dependency: libfreebl3.so for package: glibc-2.17-326.el7_9.i686
--> Running transaction check
---> Package glibc-common.x86_64 0:2.17-317.el7 will be updated
--> Processing Dependency: glibc-common = 2.17-317.el7 for package: glibc-2.17-317.el7.x86_64
---> Package glibc-common.x86_64 0:2.17-326.el7_9 will be an update
---> Package nss-softokn-freebl.x86_64 0:3.53.1-6.el7_9 will be updated
---> Package nss-softokn-freebl.i686 0:3.67.0-3.el7_9 will be installed
--> Processing Dependency: nss-util >= 3.67.0-1 for package: nss-softokn-freebl-3.67.0-3.el7_9.i686
--> Processing Dependency: nspr >= 4.30.0 for package: nss-softokn-freebl-3.67.0-3.el7_9.i686
---> Package nss-softokn-freebl.x86_64 0:3.67.0-3.el7_9 will be an update
--> Running transaction check
---> Package glibc.x86_64 0:2.17-317.el7 will be updated
---> Package glibc.x86_64 0:2.17-326.el7_9 will be an update
---> Package nspr.x86_64 0:4.25.0-2.el7_9 will be updated
---> Package nspr.x86_64 0:4.32.0-1.el7_9 will be an update
---> Package nss-util.x86_64 0:3.53.1-1.el7_9 will be updated
---> Package nss-util.x86_64 0:3.67.0-1.el7_9 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
glibc i686 2.17-326.el7_9 updates 4.3 M
Installing for dependencies:
nss-softokn-freebl i686 3.67.0-3.el7_9 updates 325 k
Updating for dependencies:
glibc x86_64 2.17-326.el7_9 updates 3.6 M
glibc-common x86_64 2.17-326.el7_9 updates 12 M
nspr x86_64 4.32.0-1.el7_9 updates 127 k
nss-softokn-freebl x86_64 3.67.0-3.el7_9 updates 337 k
nss-util x86_64 3.67.0-1.el7_9 updates 79 k
Transaction Summary
================================================================================
Install 1 Package (+1 Dependent package)
Upgrade ( 5 Dependent packages)
Total download size: 20 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
--------------------------------------------------------------------------------
Total 35 kB/s | 20 MB 09:45
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Updating : nss-softokn-freebl-3.67.0-3.el7_9.x86_64 1/12
Updating : glibc-common-2.17-326.el7_9.x86_64 2/12
Updating : glibc-2.17-326.el7_9.x86_64 3/12
Updating : nspr-4.32.0-1.el7_9.x86_64 4/12
Updating : nss-util-3.67.0-1.el7_9.x86_64 5/12
Installing : nss-softokn-freebl-3.67.0-3.el7_9.i686 6/12
Installing : glibc-2.17-326.el7_9.i686 7/12
Cleanup : nspr-4.25.0-2.el7_9.x86_64 8/12
Cleanup : nss-util-3.53.1-1.el7_9.x86_64 9/12
Cleanup : nss-softokn-freebl-3.53.1-6.el7_9.x86_64 10/12
Cleanup : glibc-common-2.17-317.el7.x86_64 11/12
Cleanup : glibc-2.17-317.el7.x86_64 12/12
Verifying : glibc-common-2.17-326.el7_9.x86_64 1/12
Verifying : nss-softokn-freebl-3.67.0-3.el7_9.x86_64 2/12
Verifying : glibc-2.17-326.el7_9.x86_64 3/12
Verifying : nss-util-3.67.0-1.el7_9.x86_64 4/12
Verifying : nspr-4.32.0-1.el7_9.x86_64 5/12
Verifying : glibc-2.17-326.el7_9.i686 6/12
Verifying : nss-softokn-freebl-3.67.0-3.el7_9.i686 7/12
Verifying : glibc-2.17-317.el7.x86_64 8/12
Verifying : glibc-common-2.17-317.el7.x86_64 9/12
Verifying : nspr-4.25.0-2.el7_9.x86_64 10/12
Verifying : nss-softokn-freebl-3.53.1-6.el7_9.x86_64 11/12
Verifying : nss-util-3.53.1-1.el7_9.x86_64 12/12
Installed:
glibc.i686 0:2.17-326.el7_9
Dependency Installed:
nss-softokn-freebl.i686 0:3.67.0-3.el7_9
Dependency Updated:
glibc.x86_64 0:2.17-326.el7_9 glibc-common.x86_64 0:2.17-326.el7_9
nspr.x86_64 0:4.32.0-1.el7_9 nss-softokn-freebl.x86_64 0:3.67.0-3.el7_9
nss-util.x86_64 0:3.67.0-1.el7_9
Complete!
Removing intermediate container 7d5529db79c6
---> 12d42a5b6004
Step 8/17 : RUN mkdir /usr/local/java
---> Running in 3e8a6abff8e2
Removing intermediate container 3e8a6abff8e2
---> f4c3fd2bae1f
Step 9/17 : ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
---> 440a6bd6da61
Step 10/17 : ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
---> Running in 24bc3cb8bd04
Removing intermediate container 24bc3cb8bd04
---> 13c4ca55f35e
Step 11/17 : ENV JRE_HOME $JAVA_HOME/jre
---> Running in 782b9bbf4d78
Removing intermediate container 782b9bbf4d78
---> f9051f305225
Step 12/17 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
---> Running in 937c1030ddd1
Removing intermediate container 937c1030ddd1
---> d9d89b3a80e0
Step 13/17 : ENV PATH $JAVA_HOME/bin:$PATH
---> Running in 92d4091fcb25
Removing intermediate container 92d4091fcb25
---> 3e3fe4a7e8ee
Step 14/17 : EXPOSE 80
---> Running in 3478980aa8b5
Removing intermediate container 3478980aa8b5
---> 370ac0bf88e2
Step 15/17 : CMD echo $MYPATH
---> Running in eeb80d74b277
Removing intermediate container eeb80d74b277
---> 7c81a14e5fff
Step 16/17 : CMD echo "success###############ok"
---> Running in bfb99fd052de
Removing intermediate container bfb99fd052de
---> 94dc9fe4a32f
Step 17/17 : CMD /bin/bash
---> Running in f5e3b73e37ec
Removing intermediate container f5e3b73e37ec
---> 24af206ac896
Successfully built 24af206ac896
Successfully tagged centosjava8:1.5
UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
回头看看构建过程中的17个步骤, 再自行体会一下什么是联合文件系统。