DockerFile理解与应用

1.DockerFile是什么?

DockerFile理解与应用

文章插图
 
DockerFile是用来构建Docker镜像的构建文件,一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释 。
我们可以通过dockerfile来构建docker镜像 。
如Tomcat的dockerfile如下:
FROM adoptopenjdk:8-jdk-hotspotENV CATALINA_HOME /usr/local/tomcatENV PATH $CATALINA_HOME/bin:$PATHRUN mkdir -p "$CATALINA_HOME"WORKDIR $CATALINA_HOMEENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-libENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIRENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6 EXPOSE 8080CMD ["catalina.sh", "run"]2.DockerFile解析1)基础结构由大写的保留字指令+参数构成 。
2)指令从上到下顺序执行 。
3)#表示注解 。
4)每条指令都会创建新的镜像层,并对镜像进行提交 。
3.DockerFile保留字指令解析1)FROM
基础镜像,当前新建的镜像是基于哪个镜像的 。2)MAINTAINER
镜像维护者的姓名邮箱主页啥的3)RUN
容器构建的时候需要的命令4)EXPOSE
当前容器对外暴露的端口5)WORKDIR
指定在创建容器后,终端默认登录的进来工作目录,一个落脚点6)ENV
镜像构建过程中需要设置的环境变量7)ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包8)COPY
将宿主机目录下的文件拷贝进镜像,或者拷贝出来9)VOLUME
容器数据卷,用于数据保存和持久化工作 。可以将宿主机目录和容器绑定,这样两个文件夹下的文件都能共通,如tomcat镜像的项目部署文件夹,映射到宿主机后,部署项目不需要进入镜像,直接部署到宿主机对应目录就可以了 。【DockerFile理解与应用】10)CMD
制动一个容器启动时要运行的命令,dockerfile中可以有多个cmd命令,但是只有最后一个会生效,之前的都会被覆盖不会被执行 。11)ENTRYPOINT
指定一个容器启动时要运行的命令,和cmd一样,但是可以指定多个命令,在容器启动时,会顺序执行 。12)ONBUILD
当构建一个被继承的dockerfile时运行命令,父镜像在被子继承后赴京向的onbuild被处罚4.示例1)基于centos构建一个能使用vim命令和ifconfig命令的,工作目录是/usr/locald的自定义的centos 。
a.自定义的dockerfile
FROM centosMAINTAINER panda_zhu@qq.comENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATHCMD echo "sucess-----------ok"CMD /bin/bashb.执行以下命令,将dockerfile构建成docker镜像
docker build -f ./mydockerfile -t mycentos:1.1 ../mydockerfile是新写的dockerfilemycentos:1.1 是新镜像的名称和版本标签最后还有一个点别忘了弹出的日志如下:Sending build context to Docker daemon2.048kBStep 1/10 : FROM centos ---> 0d120b6ccaa8Step 2/10 : MAINTAINER panda_zhu@qq.com ---> Running in e72b7682d2a1Removing intermediate container e72b7682d2a1 ---> 0c169e4db377Step 3/10 : ENV MYPATH /usr/local ---> Running in 4bcac118de46Removing intermediate container 4bcac118de46 ---> 361b12647c93Step 4/10 : WORKDIR $MYPATH ---> Running in 1f7a11a85882Removing intermediate container 1f7a11a85882 ---> c8ca5793760eStep 5/10 : RUN yum -y install vim ---> Running in c10b463ce61aCentOS-8 - AppStream4.9 MB/s | 5.8 MB00:01CentOS-8 - Base942 kB/s | 2.2 MB00:02CentOS-8 - Extras11 kB/s | 8.6 kB00:00Dependencies resolved.================================================================================ PackageArchVersionRepositorySize================================================================================Installing: vim-enhancedx86_642:8.0.1763-13.el8AppStream1.4 MInstalling dependencies: gpm-libsx86_641.20.7-15.el8AppStream39 k vim-commonx86_642:8.0.1763-13.el8AppStream6.3 M vim-filesystemnoarch2:8.0.1763-13.el8AppStream48 k whichx86_642.21-12.el8BaseoS49 kTransaction Summary================================================================================Install5 PackagesTotal download size: 7.8 MInstalled size: 31 MDownloading Packages:(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm450 kB/s |39 kB00:00(2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 2.4 MB/s |48 kB00:00(3/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm8.4 MB/s | 1.4 MB00:00(4/5): which-2.21-12.el8.x86_64.rpm496 kB/s |49 kB00:00(5/5): vim-common-8.0.1763-13.el8.x86_64.rpm9.6 MB/s | 6.3 MB00:00--------------------------------------------------------------------------------Total3.5 MB/s | 7.8 MB00:02warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEYCentOS-8 - AppStream1.6 MB/s | 1.6 kB00:00Importing GPG key 0x8483C65D: Userid: "CentOS (CentOS Official Signing Key) <security@centos.org>" Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D From: /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficialKey imported successfullyRunning transaction checkTransaction check succeeded.Running transaction testTransaction test succeeded.Running transactionPreparing:1/1Installing: which-2.21-12.el8.x86_641/5Installing: vim-filesystem-2:8.0.1763-13.el8.noarch2/5Installing: vim-common-2:8.0.1763-13.el8.x86_643/5Installing: gpm-libs-1.20.7-15.el8.x86_644/5Running scriptlet: gpm-libs-1.20.7-15.el8.x86_644/5Installing: vim-enhanced-2:8.0.1763-13.el8.x86_645/5Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_645/5Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_645/5Verifying: gpm-libs-1.20.7-15.el8.x86_641/5Verifying: vim-common-2:8.0.1763-13.el8.x86_642/5Verifying: vim-enhanced-2:8.0.1763-13.el8.x86_643/5Verifying: vim-filesystem-2:8.0.1763-13.el8.noarch4/5Verifying: which-2.21-12.el8.x86_645/5 Installed:gpm-libs-1.20.7-15.el8.x86_64vim-common-2:8.0.1763-13.el8.x86_64vim-enhanced-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarchwhich-2.21-12.el8.x86_64Complete!Removing intermediate container c10b463ce61a ---> e13ba4c98f4eStep 6/10 : RUN yum -y install net-tools ---> Running in c44679e1b6f8Last metadata expiration check: 0:00:10 ago on Sun Dec6 09:09:43 2020.Dependencies resolved.================================================================================ PackageArchitecture VersionRepositorySize================================================================================Installing: net-toolsx86_642.0-0.51.20160912git.el8BaseOS323 kTransaction Summary================================================================================Install1 PackageTotal download size: 323 kInstalled size: 1.0 MDownloading Packages:net-tools-2.0-0.51.20160912git.el8.x86_64.rpm1.8 MB/s | 323 kB00:00--------------------------------------------------------------------------------Total427 kB/s | 323 kB00:00Running transaction checkTransaction check succeeded.Running transaction testTransaction test succeeded.Running transactionPreparing:1/1Installing: net-tools-2.0-0.51.20160912git.el8.x86_641/1Running scriptlet: net-tools-2.0-0.51.20160912git.el8.x86_641/1Verifying: net-tools-2.0-0.51.20160912git.el8.x86_641/1 Installed:net-tools-2.0-0.51.20160912git.el8.x86_64Complete!Removing intermediate container c44679e1b6f8 ---> e4635d92ce93Step 7/10 : EXPOSE 80 ---> Running in 80175acc1bb0Removing intermediate container 80175acc1bb0 ---> 648de32c0418Step 8/10 : CMD echo $MYPATH ---> Running in 4bef6d09313dRemoving intermediate container 4bef6d09313d ---> ecf14f315d3eStep 9/10 : CMD echo "sucess-----------ok" ---> Running in 2d6a349f1799Removing intermediate container 2d6a349f1799 ---> e01edd932e43Step 10/10 : CMD /bin/bash ---> Running in 9b09a2ac5278Removing intermediate container 9b09a2ac5278 ---> 7c4be87820a6Successfully built 7c4be87820a6Successfully tagged mycentos:1.1


推荐阅读