6-1、是什么
6-1-1、DockerFile是用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚步
docker build [-f Dcokerfile文件] -t 镜像路由/镜像名:TAG .
注意:docker build 命令以“.”收尾(“.”是当前目录的意思)
6-1-2、构建三步骤
1、编写DockerFile文件
2、docker build
3、docker run
6-1-3、文件什么样?
以CentOS为例:https://hub.docker.com/_/centos/
6-2、DockerFile构建过程解析
6-2-1、DockerFile内容基础知识
1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2、指令按照从上到下,顺序执行
3、#表示注释
4、每条指令都会创建一个新的镜像层,并对镜像进行提交
6-2-2、docker执行DockerFile的大致流程
1、docker从基础镜像(scratch)运行一个容器
2、执行一条指令并对容器作出修改
3、执行类似docker commit的操作提交一个新的镜像层
4、docker在基于刚提交的镜像运行一个新容器
5、执行DockerFile中的下一条指令直到所有指令都执行完成
6-2-3、小总结
从应用软件的角度来看:
1、DockerFile是软件的原材料:面向开发
2、Docker镜像是软件的交付品:交付标准
3、Docker容器是软件的运行态:部署与运维
6-3、DockerFile体系结构
6-3-1、FROM:基础镜像,当前新镜像是基于那个镜像的
6-3-2、MAINTAINER:镜像维护者的姓名和邮箱地址
6-3-3、RUN:构建镜像时需要运行的命令
6-3-4、EXPOSE:当前镜像对外露出的端口
6-3-5、WORKDIR:指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点
6-3-6、ENV:用来在构建镜像过程中配置环境变量
6-3-7、ADD:将宿主机目录下得文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
6-3-8、COPY:
类似于ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置
1、COPY src dest
2、COPY ["src","dest"]
6-3-9、VOLUME:容器数据卷,用于数据保存和持久化工作
6-3-10、CMD:
1、指定一个容器启动时要运行的命令
2、DockerFile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
6-3-11、ENTRYPOINT:
1、指定一个容器启动时要运行的命令
2、ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
6-3-12、ONBUILD:当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的ONBUILD被触发
6-3-13、小总结
1、BUILD类:FROM、MAINTAINER、COPY、ADD、RUN、ONBUILD .dockerignore
2、Both类:WORKDIR、USER
3、RUN类:CMD、ENV、EXPOSE、VOLUME、ENTRYPOINT
6-4、案例
6-4-1、Base镜像(scratch)
Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的
6-4-2、自定义镜像mycentos
1、编写
1、Hub默认CentOS镜像什么情况
2、准备编辑DockerFile文件
3、myCentOS内容的DockerFile:略
2、构建
docker build [-f Dockerfile] -t 新镜像名字:TAG .
3、运行
docker run -it 新镜像名字:TAG
4、列出镜像的变更历史
docker history 镜像ID
6-4-3、CMD/ENTRYPOINT镜像案例
1、都是指定一个容器启动时要运行的命令
2、CMD
1、DockerFile中可以有多个CMD指定,但是只有最后一个生效,CMD会被docker run之后的指令替换
2、Case:tomcat讲解演示
docker run -it -p 8888:8080 tomcat ls -l
3、ENTRYPOINT
1、docker run之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组,如下Case的curl -i参数
2、Case
1、制作CMD版查询IP信息的容器
FROM centos
RUN yum install -y curl
CMD ["curl","-s","http://ip.cn"]
2、问题
3、WHY
4、制作ENTRYPOINT版查询IP信息的容器
FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl","-s","http://ip.cn"]
6-4-4、自定义镜像Tomcat9
1、mkdir -p /zzyyuse/mydockerfile/tomcat9
2、在上述目录下touch.txt
3、将jdk和tomcat安装压缩包拷贝进上一步目录
1、apache-tomcat-9.0.8.tar.gz
2、jdk-8u171-linux-x64.tar.gz
4、在/zzyy/mydockerfile/tomcat9新建Dockerfile文件
5、构建
构建成功
6、run
备注
7、验证
8、结合前述的容器卷将测试的web服务test发布
1、总体概述
2、web.xml:略
3、a.jsp:略
4、测试
6-5、小总结