DockerFile构建过程解析【笔记】

从应用软件过程来看,DockerFile、Docker镜像与Docker容器分别代表软件的三个不同阶段。
DockerFile是软件的原材料
Docker镜像是软件的交付品
Docker容器可以认为是软件的运行态
DockerFile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可。合力充当Docker体系基石
在这里插入图片描述

基础知识

在这里插入图片描述
在这里插入图片描述

Dockerfile体系结构(保留字指令)

在这里插入图片描述
【FROM】基础镜像。当前新镜像是基于哪个镜像的
例如: FROM scratch

【MAINTAINER】镜像维护者的姓名和邮箱地址
例如:MAINTAINER The CentOS Project [email protected]

【RUN】容器构建时需要运行的命令,即在构建镜像时执行一个具体的命令
例如:RUN groupadd -r redis && useradd -r -g redis redis
构建一个redis 用户组并添加一个叫redis 的用户

【EXPOSE】当前容器对外暴露出的端口
例如:EXPOSE 6379

【WORKDIR】指定在创建容器后,终端默认登入的进来工作目录,一个落脚点
例如:WORKDIR /data
登入之后,你的工作目录即为data

【ENV】用来在构建镜像过程中设置环境变量
例如:
ENV MY_PATH/user/mytest
WORKDIR $MY_PATH
设置变量叫MY_PATH,值为user/mytest,登入之后直接进入user/mytest,不再是根目录/
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量

【ADD】在宿主机的目录下的文件拷贝至镜像且ADD命令会自动处理URL和解压tar压缩包
例如:ADD centos-7-docker.tar.xz/
在构建dockerfile上下文路径时,把centos-7-docker.tar.xz/ 拷贝(并解压缩)至镜像中

【COPY】类似ADD,拷贝文件和目录到镜像中,将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
例如:
COPY src dest
COPY [“src”," dest"]

【VOLUME】容器数据卷,用于数据保存和持久化工作
例如:
FROM centos
VOLUME["/dataVolumeContainer1",“dataVolumeContainer2”]
建立centos时,同时在根目录下自建dataVolumeContainer1与dataVolumeContainer2两个容器数据卷

扫描二维码关注公众号,回复: 9303125 查看本文章

【CMD】指定一个容器启动时要运行的命令
在这里插入图片描述
例如:
CMD ["/bin/bash"]
CMD cat/etc/hosts
则第二条CMD覆盖第一条CMD

Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

【ENTRYPOINT】指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,但是追加

【ONBUILD】当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后,父镜像的onbuild被触发

案例1 自定义镜像

在这里插入图片描述
自定义mycentos目的使我们自己的镜像具备:(1)登入后的默认路径(2)vim编辑器(3)查看网络配置ifconfig支持
在这里插入图片描述
在/mydocker下新vim Dockerfile2,写入

from centos
ENV MYPATH /usr/local
WORKDIR $MYPATH #登入之后直接进入/usr/local
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash

在这里插入图片描述
保存退出后执行 docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .
在这里插入图片描述
之后docker images mycentos 可查看自己构建的新镜像
在这里插入图片描述
之后docker run -it mycentos:1.3
在这里插入图片描述
至此支持vim与ifconfig等工具
在这里插入图片描述

案例2 onbuild指令

编写Dockerfile4,写入
在这里插入图片描述
执行docker build -f /mydocker/Dockerfile4 -t myip_father
在这里插入图片描述
之后执行cp Dockerfile4 Dockerfile5,修改Dockerfile5 ,保存退出
在这里插入图片描述
执行docker build -f /mydocker/Dockerfile5 -t myip_son
在这里插入图片描述
子类继承时,父类被执行

案例3 自定义镜像Tomcat9

在这里插入图片描述
新建一个Dockerfile,执行vim Dockerfile
在这里插入图片描述
编辑该Dockerfile,写入以下内容,保存退出
在这里插入图片描述
在这里插入图片描述
执行docker build -t zzyytomcat9 .
在这里插入图片描述
之后可执行docker images查看该新镜像
在这里插入图片描述
执行docker run …,-i 交互,-t展示终端,-d 不交互,-P 随机分配端口,-p 主机端口 : 容器端口,–name 对容器命名,-v 新建了两个容器卷
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
docker run -d 不返回容器终端,在宿主机内执行docker exec 容器ID 命令,对容器进行操作
在这里插入图片描述
在这里插入图片描述

Dockerfile总结

在这里插入图片描述
1、编写Dockerfile
2、build 生成镜像
3、run 生成具体实例——容器
4、当前容器可commit生成新镜像
5、新镜像可push推送至Docker hub或阿里云

发布了11 篇原创文章 · 获赞 0 · 访问量 584

猜你喜欢

转载自blog.csdn.net/ajc_zh/article/details/104402169
今日推荐