DockerFile系统的学习

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教程:

https://www.cnblogs.com/newAndHui/p/13508771.html

原文地址:https://www.cnblogs.com/newAndHui/p/13458788.html