Docker基础:Dockerfile知识介绍1、Dockfile介绍Dockfile是一个可以被Docker解释的脚本文件。Dockerfile其实是由几条指令组成的,每条指令对应Linux下的一个脚本命令。Docker应用程序可以将这些指令翻译成Linux实际执行的命令。Docker读取Dockerfile文件的指令,生成对应的docker镜像。通过dockerfile文件,可以清晰的描述Docker镜像是如何一步步构建的。通过Dockerfile,我们可以根据实际业务需求构建自己的镜像,添加一些需要执行的命令,可以避免后续的部署工作,省去重复敲命令的繁琐过程,大大节省了项目部署的时间成本2.Dockerfile命令编写规则Dockerfile指令忽略大小写,但建议使用大写。您可以使用#作为指令的注释。每行只能代表一条指令,每条指令可以携带多个参数。3.Dockerfile指令的分类按照其作用可以分为两种,构建指令和设置指令。构建指令:用于构建Docker镜像,指定的操作不会在运行该镜像的容器上执行,属于镜像构建过程。.设置说明:用于设置Docker镜像的属性,指定的操作将在运行该镜像的容器中执行。4.Dockerfile指令的组成4.1From(指定基础镜像)Dockerfile必须指定FROM,并且是第一行,属于build命令。表示构建基础镜像所依据的基础镜像,可以是本地镜像,也可以是远程仓库镜像语法:FROM镜像名称4.2MAINTAINER(specifyimageauthorinformation)用于指定构建的作者信息该镜像方便后续通过dockerinspect命令查看,对镜像没有实际影响。语法:MAINTAINER作者姓名4.3RUN(指定要执行的shell命令)该命令会在新建的镜像中添加一个新层。在docker构建时运行。格式:RUNcommandcommand4.4CMD(设置容器启动时执行的操作)可以是执行自定义脚本,也可以是执行系统命令。该命令在文件中只能存在一次。如果有多个,则只执行最后一个。在docker运行时运行。格式:CMD["executable","param1","param2"]orCMD["param1","param2"]4.5ENTRYPOINT(设置容器启动时要执行的操作)设置命令,指定要执行的命令容器启动时执行,可以Append命令,但只有最后一个ENTRYPOINT有效。格式:ENTRYPOINT["executable","param1","param2"]4.6USER(设置容器中执行shell命令的用户)设置指令,设置启动容器的用户,默认为root用户。格式:USERroot4.7EXPOSE(主机和容器端口映射设置)指定容器需要映射到宿主机的端口。格式:EXPOSEport4.8ENV(setenvironmentvariable)ENV命令可以用来给docker容器设置环境变量。例子:ENVJAVA/HOME/usr/local/jdk1.8.0.25指定java环境变量4.9ADD(filecopycommand)复制文件命令,支持自动下载解压格式:ADD源路径目标路径优点:执行<源文件后>对于tar压缩文件,如果压缩格式为gzip、bzip2、xz,会自动复制解压到<目标路径>。缺点:Tar压缩包不解压不能复制。将使图像构建缓存无效,这可能会减慢图像构建速度。是否使用可以根据是否需要自动解压来决定。说明:参数:destination为容器内部的路径。source可以是下载文件的URL也可以是host主机的目录。4.10COPY类似于??ADD命令。复制本地文件到镜像时,本地目录为源目录。官方推荐使用COPY。4.11VOLUME(指定挂载点)创建一个可以从本地主机或其他容器挂载的挂载点,用来存放数据库和需要保留的数据等。4.12WORKDIR(设置工作目录)指定工作的RUN、CMD和ENTRYPOINT命令目录。格式:WORKDIR/path/to/workdir5,完整的Dockerfile示例5.1CreatemytomcatfileFROMcentos#SetauthorMAINTAINERxiaomingadmion@qq.com#copytomcatjdktotheimageandunzipADDapache-tomcat-8.5.30.tar.gz/usr/local/tomcatADDjdk-8u202-linux-x64.tar.gz/usr/local/jdk#设置工作目录ENVMYPATH/usr/localWORKDIR$MYPATH#配置jdk和tomcat环境变量ENVJAVA_HOME/usr/local/jdk/jdk1.8.0_202ENVCATALINA_HOME/usr/local/tomcat/apache-tomcat-8.5.30ENVCATALINA_BASE/usr/local/tomcat/apache-tomcat-8.5.30ENVCLASSPATH$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENVPATH$PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin#设置暴露端口EXPOSE8080#运行tomcatCMD/usr/local/tomcat/apache-tomcat-8.5.30/bin/startup.sh&&tail-f/usr/local/tomcat/apache-tomcat-8.5.30/logs/catalina.out5.2构建镜像dockerbuild-fmytomcat-txm/tomcat:1.8。注意:dockerbuild命令结束必须有一个。5.3运行镜像dockerrun-d-p8080:8080--namemytomcat1.8-v/usr/local/tomcat/logs:/usr/local/tomcat/apache-tomcat-8.5.30/logs/-v/usr/local/tomcat/webapps:/usr/local/tomcat/apache-tomcat-8.5.30/webapps/xm/tomcat:1.8
