Docker>04 - 数据卷的使用

扯淡:

Docker 数据卷分为容器数据卷数据卷容器。卷即目录或文件,由docker 挂载到容器。容器数据卷主要用来做数据持久化、容器和宿主机、容器与容器间的资源共享。数据卷容器挂载数据卷作为父容器,其他容器挂载这个父容器实现数据共享。

springboot、springcloud、docker学习目录:【传送门】    

容器数据卷:


设计目的:

docker 中卷的设计目的就是独立于容器的生存周期,使数据持久化,存在于宿主机的文件系统中。

数据卷特点:

1、数据卷在容器启动时初始化,如果镜像在挂载点包含了数据,这些数据会同步到新初始化的数据卷中。
2、数据可在容器和容器、容器和宿主机之间共享、重用。
3、卷中数据的更改会直接同步到容器中。
4、一个数据卷支持多个容器同时使用。
5、数据卷的生命周期会一直持续到没有容器使用它为止。

数据卷添加方式:


1、命令的方式:-v 参数

# 指定数据卷
docker run –it –v /宿主机绝对路径目录:/容器内目录  镜像

案例:运行一个nginx容器,指定数据卷容器

Docker>04 - 数据卷的使用

使用 Ctrl + p + q 退出容器,查看根目录:

Docker>04 - 数据卷的使用

主机和容器都创建了相应的目录。可在两边分别创建、修改、删除文件,查看效果。

注意:

  • 第一次运行时,没有文件会自动创建。

  • 容器停止,主机修改数据卷,待容器启动后会同步数据卷中的修改。

  • 此数据卷可供多台容器共同使用。

  • 若需要制定容器中目录的权限,可使用 :ro(ready only)

  • docker run –it –v /宿主机绝对路径目录:/容器内目录:ro 镜像名  // 容器中的卷只读

2、Dockerfile 指令添加数据卷:

VOLUME :给镜像添加一个或多个数据卷。

案例:构建一个自己的centos镜像,指定两个数据卷容器。

2.1、编写Dockerfile

#自定义一个centos
FROM centos
MAINTAINER ron
# 登录之后的工作目录 落脚点
# WORKDIR /

# 创建两个数据卷
VOLUME ["/dataVolume1","/dataVolume2"]

# 基础镜像不支持vim 和 ipconfig命令
# 构建容器时运行的命令
RUN yum -y install vim
RUN yum -y install net-tools

CMD /bin/bash

2.2、docker build 构建镜像

Docker>04 - 数据卷的使用

注意此处要小写。

2.3、使用step 2 中构建的镜像创建容器

Docker>04 - 数据卷的使用

可以看到在Dockerfile 中使用 VOLUME 指定的两个卷。

2.4、Dockerfile 只支持容器目录的添加。

原因:处于docker镜像的可移植和分享考虑,Dockerfile 中的VOLUME 并不能创建宿主机的目录,因为此目录是依赖与特定主机的,并不能保证所有的宿主机都有这样的目录。

5、查看宿主机中的数据卷。

不能够创建指定的目录,但是宿主机中还是默认生成了一个目录。使用 inspect 查看。

Docker>04 - 数据卷的使用

查看 json 详细信息:

Docker>04 - 数据卷的使用

查看宿主机目录:

Docker>04 - 数据卷的使用

可在改目录下操作,与容器中的dataVolume1资源共享。

数据卷容器:

命名的容器挂载数据卷,其他的容器通过挂载这个父容器实现数据共享, 挂载数据卷的容器称之为数据卷容器。

Docker>04 - 数据卷的使用

场景:

容器1(c1):父容器,挂载数据卷;容器2(c2)、容器3(c3)继承容器1。

volumes-from:容器间传递共享

1、启动父容器 c1 (挂载了数据卷)

2、启动 c2、c3 均继承 c3

docker run -it --name c2 --volumes-from c1 镜像

特点:

1、全部正常运行,各自修改都可以共享

2、删除 c1(父容器),c2、c3 都不会受到影响,此时修改 c2, c3 也可以共享。

即:数据卷容器只是容器间配置信息的传递,即使容器被删除,数据卷也有效。

总结:

1、数据卷主要实现数据的持久化和资源共享。
2、数据卷中的数据可在容器和容器、宿主机和容器间共享重用。
2、容器数据卷创建的两种方式,命令 -v 参数 和 dockerfile 中的 VOLUME 指令。
3、数据卷容器作父容器使用,删除父容器,其继承的子容器不受影响。


个人学习分享
更多 springboot、springcloud、docker 文章,关注微信公众号吧:

Docker>04 - 数据卷的使用