之前介绍过相关文章如下:Docker容器系列文章|Docker技术介绍(一)Docker容器系列文章|Docker技术介绍(二)Docker容器系列文章|本篇20条Docker命令,你知道几个?Dockerfile简单介绍Docker可以使用Dockerfile中的内容自动构建镜像。Dockerfile也是一个文件,里面包含了创建镜像、运行指令等一系列命令,每一行只支持一个运行命令。Docker文件分为四个部分:基本镜像维护者信息镜像操作指令容器启动时执行的指令dockerfile指令忽略大小写,推荐大写,#作为注释,每行只支持一条指令可以有多个参数。dockerfile指令有:构建指令:用于构建镜像,指定的操作不会在运行镜像的容器中执行。设置指令:用于设置镜像的属性,指定的操作将在运行该镜像的容器中执行。Dockerfile指令Dockerfile指令一共有以下几种:1.FROM用于指定基础镜像,然后在基础镜像上构建新的镜像。基础镜像一般都有远程或者本地仓库。并且Dockerfile的第一行必须有FROM指令。如果一个Dockerfile需要创建多个镜像,可以使用多个FROM指令。#具体用法如下:FROM#默认为最新版本FROM#指定版本2,MAINTAINER指定镜像的创建者信息#具体用法如下:MAINTAINER3、RUN运行所有基础镜像可以支持的命令也可以使用多个RUN命令,可以换行使用#具体用法如下:RUNRUN["executable","param1","param2"...](execform)4、CMD用于容器启动时的指定操作。它可以是命令或脚本,但只执行一次。如果有很多,默认只执行最后一个。#具体用法如下:CMD["executable","Param1","param2"]用exec执行,CMD命令param1param2推荐,CMD["param1","param2"]提供给ENTRYPOINTon/bin/sh设置默认参数。5、EXPOSE指定容器的端口映射(容器和物理机),在运行容器时,加上-p参数指定EXPOSE设置的端口。EXPOSE可以设置多个端口号,通过-p参数对应多次运行容器。可以通过dockerport+容器需要映射的端口号和容器ID来引用宿主机的映射端口。#具体用法如下:EXPOSE[port1,port2......]6.ENV用于在镜像中设置环境变量,然后RUN命令就可以使用设置的环境变量,之后容器启动后,也可以通过dockerinspect查看环境变量。您可以通过dockerrun--envkey=value设置或修改环境变量。#具体用法如下:ENVENVJAVA_HOME/usr/local/jdk7,ADD复制指定源文件、目录、URL到容器指定目录。复制到容器中的所有文件和文件夹的权限都是0755,uid和gid都是0。如果source是目录,则该目录下的所有文件都会被添加到容器中,不包括该目录;如果源文件是可识别的压缩格式,docker会帮忙解压(注意压缩格式);如果source是一个文件,并且target目录没有以斜线结尾,那么target目录会被当做一个文件,source的内容会被写入target目录;如果源是一个文件,目标目录以斜杠结尾,源文件将被复制到目标目录。#具体用法如下:ADD8.COPY将本地主机的source(默认为Dockerfile所在目录)复制到容器中的target。如果目标路径不存在,则会自动创建。#具体用法如下:COPYCOPYweb/index.html/var/web/路径必须是绝对路径。如果不存在,会自动创建对应的目录路径。该路径必须是Dockerfile所在路径的相对路径。如果是A目录,只会复制目录的内容,而不会复制目录本身。9.ENTRYPOINT指定容器启动后要执行的命令,多行只执行最后一行。并且不能被dockerrun提供的参数覆盖。#具体用法如下:ENTRYPOINT"command""param1""param2"10.VOLUME创建一个挂载点,可以从本地主机或其他容器挂载,一般用于存储数据。这也可以通过dockerrun-v实现。#具体用法如下:VOLUME[directory_name]VOLUME/docker_data11,USER指定容器运行时使用的用户或UID,RUN、CMD、ENTRYPIONT后面会使用这个用户运行命令。#具体用法如下:USER[username/uid]12,WORKDIR指定RUN、CMD、ENTRYPIONT指定命令的运行目录。可以使用多个WORKDIR指令,如果后面的参数是相对路径,则以前面命令指定的路径为准。如:WORKDIR/data WORKDIR工作。最终路径是/data/work。路径路径也可以是环境变量。#具体使用方法如下:WORKDIR[path]13.ONBUILD配置当前创建的镜像作为其他新建镜像的基础镜像时执行的操作指令。即创建此镜像后,如果其他镜像基于此镜像,则先执行此镜像的ONBUILD命令。#具体用法如下:ONBUILD[INSTRUCTION]通过Dockerfile快速构建镜像接下来我们通过构建Tomcat镜像来演示Dockerfile的用法。前提是安装好Docker环境。Docker环境如何安装这里不再赘述。请戳下方文字:[root@mastertomcat]#lltotalusage190504-rw-r--r--1rootroot9552281June715:07apache-tomcat-8.5.31.tar.gz-rw-r--r--1rootroot32Jul309:41index.jsp-rw-r--r--1rootroot185515842Sep202017jdk-8u144-linux-x64.tar.gz[root@mastertomcat]#catindex.jsp欢迎来到民工哥网站[root@mastertomcat]#pwd/root/docker/tomcat[root@mastertomcat]#vimDockerfile#configfilestart#FROMcentosMAINTAINERmingongge#添加jdk和tomcat软件ADDjdk-8u144-linux-x64.tar.gz/usr/local/ADDapache-tomcat-8.5.31.tar.gz/usr/local/ADDindex.jsp/usr/local/apache-tomcat-8.5.31/webapps/ROOT/#configjavaandtomcatENVENVJAVA_HOME/usr/local/jdk1.8.0_144ENVCLASSPATH$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENVCATALINA_HOME/usr/local/apache-tomcat-8.5.31/ENVPATH$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin#configtomcat监听端口EXPOSE8080#configtomcat启动命令CMD/usr/local/apache-tomcat-8.5.31/bin/catalina.shrun#endofconfig-file#Buildingprocess[root@mastertomcat]#dockerbuild-ttomcat-web.#这。无需评论。相信懂的人自然会懂SendingbuildcontexttoDockerdaemon195.1MBStep1/11:FROMcentos--->49f7960eb7e4Step2/11:MAINTAINERmingongge<微信公众号:打工哥技术之路>--->运行中afac1e218299--->a404621fac22RemovingintermediateStediatecontainer3afac9e/11:ADDjdk-8u144-linux-x64.tar.gz/usr/local/--->4e22dafc2f76Removingintermediatecontainerb1b23c6f202aStep4/11:ADDapache-tomcat1.8.5.3tar.gz/usr/local/--->1efe59301d59Removingintermediatecontaineraa78d5441a0aStep5/11:ADDindex.jsp/usr/local/apache-tomcat-8.5.31/webapps/ROOT/--->f09236522370Removingintermediatecontainereb54e6eb963aJAEN_Step:6//jdk1.8.0_144--->在3aa91b03d2d1中运行--->b497c5482fe0删除中间容器3aa91b03d2d1步骤7/11:ENVCLASSPATH$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar--->在f2649b5069be中运行--->9cedb218a8dfRemovingintermediatecontainerf2649b5069beStep8/11:ENVCATALINA_HOME/usr/local/apache-tomcat-8.5.31/--->Runningin39ef620232d9--->ccab256164feRemovingintermediatecontainer39ef6202932d9Step:ENVCATALINA_HOME/usr/local/apache-tomcat-8.5.31/PATH$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin--->Runningina58944d03d4a--->f57de761a759Removingintermediatecontainera58944d03d4aStep10/11:EXPOSE8080--->Runningin30681437d265--->b906dcc265184Removing152intermediatecontainer4316Step10/11中间容器/11:CMD/usr/local/apache-tomcat-8.5.31/bin/catalina.shrun--->Runningin437790cc642a--->95204158ee68Removingintermediatecontainer437790cc642aSuccessfullybuilt95204158ee68通过结构的镜像启动[tomcat]#dockerrun-d-p8080:8080tomcat-webb5b65bee5aedea2f48edb276c543c15c913166bf489088678c5a44fe9769ef45[root@mastertomcat]#dockerpsCONTAINERID图像命令创建状态SPORTSNAMESb5b65bee5aedtomcat-web"/bin/sh-c'/usr/..."5秒前Up4秒0.0.0.0:8080->8080/tcpvigilant_heisenberg访问容器浏览器,输入http://server-ip:8080,结果如下: