一.知识回顾
之前的内容都帮你整理好了,在这里哟!
【0.Docker相关目录文章整理,可自行查看,包含多节内容】
【1.Docker详细安装部署&阿里镜像地址配置】
【2.Docker架构&&架构角色概念&&角色作用】
【3.Docker命令详细讲解&实操演示】
【4.Docker镜像文件&加载原理&生产中重新制作并提交镜像文件&案例演示】
二.Docker数据卷
2.1 数据卷基本概念
- 通过镜像我们可以启动多个容器,但是我们发现当我们的容器停止获取删除后,我们在容器中的应用的一些数据也丢失了,这时为了解决容器的数据持久化,我们需要通过容器数据卷来解决这个问题。
- 也就是我们通过docker命令运行容器的时候将其容器中相关的目录结构对应挂载到我们宿主机的目录结构当中。
- Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。简单来说,容器卷就相当于Redis中持久化方式的RDB和AOF。
2.2 解决了什么问题
- 数据卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器。
- 数据卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
2.3 数据卷的特点:
-
数据卷可在容器之间共享或重用数据
-
卷中的更改可以直接生效
-
数据卷中的更改不会包含在镜像的更新中
-
数据卷的生命周期一直持续到没有容器使用它为止
-
持久化,容器间继承和共享数据
2.4 挂载目录命令
docker run -it -v /宿主机绝对路径:/容器内目录 镜像名
三.数据卷容器
3.1 数据卷容器概念
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据的容器,称之为数据卷容器。
3.2 父容器挂载俩个子容器
# 先创建一个父容器
docker run -it --name tomcat_parent tomcat
# 再创建俩个子容器,将其挂载在父容器下面
docker run -it --name tomcat_node1 --volumes-from tomcat_parent tomcat
docker run -it --name tomcat_node2 --volumes-from tomcat_parent tomcat
创建了两个子容器后,首先都可以看到tomcat_parent 中的共享资源。在tomcat_node1中或者tomcat_node1中修改了共享资源文件后,它的两个容器中也是可见的。因为它们都指向了宿主机下最终的挂载目录,一个变,就修改了根资源,其它的节点都可以更新拿到最新的数据。
四.DockerFile执行流程
4.1 DockerFile的概念
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
4.2 DockerFile核心
4.2.1 构建容器的三个步骤
- 编写dockerfile文件
- docker build
- docker run
4.2.2 dockerfile指令规则
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
#
表示注释- 每天指令都会创建一个新的镜像层,并对镜像进行提交
4.2.3 docker执行一个dockfile脚本的流程:
- docker从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新的容器
- 执行dockerfile中的下一条指令直到所有指令都执行完成
4.2.4 Dockerfile、Docker镜像、Docker容器三者区别
- Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
- Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;
- Docker容器,容器是直接提供服务的。
4.2.5 Dockerfile文件中命令
Dockerfile文件中命令 | Dockerfile文件中关于命令的解释说明 |
---|---|
FROM | 基础镜像,当前新镜像是基于哪个镜像的,有继承的意味 |
MAINTAINER | 镜像维护者的姓名和邮箱地址 |
RUN | 容器构建时需要运行的命令 |
EXPOSE | 当前容器对外暴露的端口 |
WORKDIR | 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点 |
ENV | 用来在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 |
COPY | 类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 COPY src dest COPY [“src”,“dest”] |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器启动时要运行的命令 Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换 |
ENTRYPOINT | 指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数 |
ONBUILD | 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发 |
好了,本篇文章【Docker数据卷&数据卷容器&DockerFile执行流程】就学习这么多,下篇文章继续学习基于DockerFile文件制作镜像的相关操作。