1.背景
DockerFile定义:用来构建Docker镜像的文件,有脚本命令组成。
自定义镜像并运行步骤:
编写dockerFile文件--》docker build为镜像--》docker run 运行镜像
dockerFile文件模板可以在官网看到:
https://hub.docker.com/
2.基本语法介绍
dockerFile的基础规则
1.dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
2.Docker以从上到下的顺序运行Dockerfile的指令。
3.以#字符开头则被视为注释。
4.第一条指令必须是FROM,用来确定基本镜像来源。
5.每条指令的关键字必须大写,且后面至少要有一个参数
6.每条指令都会创建一个新的镜像层,并提交镜像产生id
Docker build执行dockerFile的流程
1.docker从基础镜(由From 指定)像运行一个容器
2.由上往下执行指令,并对容器作出修改
3.修改完成后提交一个新的镜像并返回镜像id
4.docker再基于刚才的新镜像运行一个新的容器
5.接着执行下一条指令,重复步骤2、3、4,指导所有指令执行完
3.dockerFile关键字
如下讲解,我们以构建一个tomcat镜像为例,说明常用关键字
3.1.FROM
作用:指定基础镜像,当前新镜像是基于哪个镜像的。
案例:FROM centos
备注:如果没有基础镜像,需要写成 FROM scratch,这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像
3.2.MAINTAINER
[maintainer : n.维护者;维护设备;软件维护人员;(律 史)非法帮助诉讼者]
作用:镜像维护者的姓名和邮箱地址
案例:MAINTAINER lidongping <851298348@qq.com>
3.3.RUN
作用:容器构建时需要运行的命令
案例:RUN yum -y install vim ,表示安装vim编辑器功能
3.4.ENV
作用:定义一个变量,与Java中定义一个常量一样的道理
案例:ENV WORK_PATH /usr/local
3.5.WORKDIR
作用:指定在创建容器后,终端默认登陆进来的工作目录
案例:WORKDIR $WORK_PATH
备注:这里使用了上一步的ENV WORK_PATH /usr/local变量,等同于WORKDIR /usr/local
3.6.COPY
作用:拷贝文件和目录到镜像中
案例:COPY readme.txt /home
备注:将当前文件下的readme.txt 拷贝到容器中的centos中的home目录下
3.7.ADD
作用:与上面的copy作用一样,拷贝文件和目录到镜像中,只是ADD命令会自动处理URL和解压tar压缩包
案例:ADD jdk-8u131-linux-x64.tar.gz /usr/local/
3.8.EXPOSE
作用:当前容器对外暴露出的端口
案例:EXPOSE 8080
3.9.CMD
作用:指定一个容器启动时要运行的命令。可以有多个CMD指令,但只有最后一个生效,CMD 会被docker run 之后的参数替换;
案例:CMD ["/usr/local/apache-tomcat-8.5.41/bin/catalina.sh","run"]
3.10.ENTRYPOINT
entry point 入口点,进入点
作用:指定一个容器启动是要运行的命令。ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,但是ENTRYPOINT不会被docker run 之后的参数替换;
案例:ENTRYPOINT ["/usr/local/apache-tomcat-8.5.41/bin/startup.sh" ]
3.11.VOLUME
volume 体积,容器
作用:容器数据卷,用于数据保存和持久化工作
案例:VOLUME ["/c-data01", "/c-data02","/更多路径"]
到此,常用的命令大概就这些,更多的命令大家可以自己查官方文档,使用方式和套路大致是一样的。
4.实际案例
本案例以构建一个tomcat镜像为实际案例作为演示
第一步,准备素材,
在根路径下建立myTomcat文件夹,并准备如下素材
构建文件:dockerFileTomcat文件内容如下
#基础容器来自于centos FROM centos #设置维护者的邮箱和微信 MAINTAINER email:lidongping<851298348@qq.com.com>,wechat:851298348 #安装vim编辑器 RUN yum -y install vim #默认的centos容器时不带ifconfig命令的,安装ip查询工具,即可以使用ifconfig命令 #RUN yum install net-tools #定义一个变量,类似于java中定义一个常量 ENV WORK_PATH /usr/local #设置工作访问时候的WORKDIR路径,即进入容器后的默认工作目录 WORKDIR $WORK_PATH #把宿主机当前上下文的readme.txt拷贝到容器/usr/local/路径下 COPY readme.txt $WORK_PATH/readme.txt #把java与tomcat拷贝到容器并解压 ADD jdk-8u131-linux-x64.tar.gz $WORK_PATH/ ADD apache-tomcat-8.5.41.tar.gz $WORK_PATH/ #配置java、tomcat环境变量 ENV JAVA_HOME $WORK_PATH/jdk1.8.0_131 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME $WORK_PATH/apache-tomcat-8.5.41 ENV CATALINA_BASE $WORK_PATH/apache-tomcat-8.5.41 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器运行时监听的端口 EXPOSE 8080 #启动tomcat CMD ["/usr/local/apache-tomcat-8.5.41/bin/catalina.sh","run"]
第二步,执行构建镜像命令
docker build -f /myTomcat/dockerFileTomcat -t lidongping/tomcat01 .
注意:如果构建文件名称为:Dockerfile,且在当前路径下,可以直接写为:docker build -t lidongping/tomcat01 .
第三步, 运行上一步构建的lidongping/tomcat01 镜像
命令:docker run -d -p 8081:8080 lidongping/tomcat01
第四步,访问tomcat,看是否正常
完美!
系统化学习docker教程: