`

Docker数据卷容器

阅读更多

原文地址:http://www.hxstrive.com/article/643.htm

 

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



 

看图说文:

(1) 上图中dc1容器挂载了数据卷
(2) dc2和dc3使用“--volumes-from”选项直接继承自dc1容器。因此,也能够访问数据卷,dc1/dc2/dc3 三个容器之间可以通过数据卷共享数据。
    ① 如果删除dc1容器,则dc2和dc3还是可以通过数据卷共享数据。
    ② 如果删除dc3容器,则dc2还是可以通过数据卷共享数据。
(3) 新建dc4容器,该容器继承dc2容器,dc4还是能够访问数据卷。
    ① 如果删除dc2容器,则新创建的dc4容器还是能够访问数据卷。


实例:先启动一个父容器dc1;dc2/dc3容器继承自dc1(使用--volumes-from命令);

(一)首先,使用“docker run -it --name dc1 -v /myDataVolume:/dataVolume centos”命令启动父容器dc1。如下:
[root@localhost ~]# docker run -it --name dc1 -v /myDataVolume:/dataVolume centos
[root@0c90abf2767d /]# ll /dataVolume/
total 0


上面成功创建了dc1容器。然后使用“docker ps”查看新创建的容器,如下:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
0c90abf2767d        centos              "/bin/bash"         About a minute ago   Up About a minute                       dc1
 
(二)使用“--volumes-from”选项启动dc2/dc3容器,从dc1继承数据卷。启动dc2,命令为“docker run -it --names dc2 --volumes-from dc1 centos”。如下:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0c90abf2767d        centos              "/bin/bash"         3 minutes ago       Up 3 minutes                            dc1
[root@localhost ~]# docker run -it --name dc2 --volumes-from dc1 centos
[root@e74c92ee0f01 /]# ll /dataVolume/
total 0
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e74c92ee0f01        centos              "/bin/bash"         53 seconds ago      Up 52 seconds                           dc2
0c90abf2767d        centos              "/bin/bash"         5 minutes ago       Up 5 minutes                            dc1

 

启动dc3如下:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
e74c92ee0f01        centos              "/bin/bash"         About a minute ago   Up About a minute                       dc2
0c90abf2767d        centos              "/bin/bash"         5 minutes ago        Up 5 minutes                            dc1
[root@localhost ~]# docker run -it --name dc3 --volumes-from dc1 centos
[root@946ad8b067aa /]# ll /dataVolume/
total 0
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
946ad8b067aa        centos              "/bin/bash"         About a minute ago   Up 59 seconds                           dc3
e74c92ee0f01        centos              "/bin/bash"         3 minutes ago        Up 3 minutes                            dc2
0c90abf2767d        centos              "/bin/bash"         7 minutes ago        Up 7 minutes                            dc1
 

(三)我们创建数据到dc2/dc3的/dataVolume目录,然后进入到dc1的/dataVolume目录查看文件。如下:

a、向dc2的/dataVolume目录写入数据:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
946ad8b067aa        centos              "/bin/bash"         3 minutes ago       Up 3 minutes                            dc3
e74c92ee0f01        centos              "/bin/bash"         5 minutes ago       Up 5 minutes                            dc2
0c90abf2767d        centos              "/bin/bash"         9 minutes ago       Up 9 minutes                            dc1
[root@localhost ~]# docker attach e74c92ee0f01
[root@e74c92ee0f01 /]# cd dataVolume/
[root@e74c92ee0f01 dataVolume]# touch dc2.txt
[root@e74c92ee0f01 dataVolume]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 30 10:07 dc2.txt


b、向dc3的/dataVolume目录写入数据:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
946ad8b067aa        centos              "/bin/bash"         5 minutes ago       Up 5 minutes                            dc3
e74c92ee0f01        centos              "/bin/bash"         8 minutes ago       Up 8 minutes                            dc2
0c90abf2767d        centos              "/bin/bash"         12 minutes ago      Up 12 minutes                           dc1
[root@localhost ~]# docker attach 946ad8b067aa
[root@946ad8b067aa /]# ll /dataVolume/
total 0
-rw-r--r--. 1 root root 0 Jun 30 10:07 dc2.txt
[root@946ad8b067aa /]# touch /dataVolume/dc3.txt
[root@946ad8b067aa /]# ll /dataVolume/
total 0
-rw-r--r--. 1 root root 0 Jun 30 10:07 dc2.txt


从上面最终结果可知,我们在dc3中能够看见dc2刚刚创建的dc2.txt文件。说明:dc2和dc3之间数据是共享的,可以相互访问。

 

验证问题:
(1) 向dc2/dc3写入数据,进入dc1验证是否能够查看dc2/dc3新添加的数据?能查看
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
946ad8b067aa        centos              "/bin/bash"         8 minutes ago       Up 8 minutes                            dc3
e74c92ee0f01        centos              "/bin/bash"         10 minutes ago      Up 10 minutes                           dc2
0c90abf2767d        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                           dc1
[root@localhost ~]# docker attach 0c90abf2767d
[root@0c90abf2767d /]# ll /dataVolume/
total 0
-rw-r--r--. 1 root root 0 Jun 30 10:07 dc2.txt
-rw-r--r--. 1 root root 0 Jun 30 10:12 dc3.txt
 
(2) 删除dc1,验证dc2修改后dc3可否访问?能访问
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
946ad8b067aa        centos              "/bin/bash"         11 minutes ago      Up 11 minutes                           dc3
e74c92ee0f01        centos              "/bin/bash"         13 minutes ago      Up 13 minutes                           dc2
0c90abf2767d        centos              "/bin/bash"         17 minutes ago      Up 17 minutes                           dc1
[root@localhost ~]# docker stop 0c90abf2767d
0c90abf2767d
[root@localhost ~]# docker rm 0c90abf2767d
0c90abf2767d


上面,先使用“docker stop”停止dc1容器,然后使用“docker rm”删除dc1容器。查看dc2/dc3的数据。如下:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
946ad8b067aa        centos              "/bin/bash"         12 minutes ago      Up 12 minutes                           dc3
e74c92ee0f01        centos              "/bin/bash"         15 minutes ago      Up 15 minutes                           dc2
[root@localhost ~]#
[root@localhost ~]# docker exec -t e74c92ee0f01 ls /dataVolume
dc2.txt  dc3.txt
[root@localhost ~]# docker exec -t 946ad8b067aa ls /dataVolume
dc2.txt  dc3.txt
 
(3) 删除dc2后,dc3能够访问?能访问
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
946ad8b067aa        centos              "/bin/bash"         14 minutes ago      Up 14 minutes                           dc3
e74c92ee0f01        centos              "/bin/bash"         16 minutes ago      Up 16 minutes                           dc2
[root@localhost ~]# docker stop e74c92ee0f01
e74c92ee0f01
[root@localhost ~]# docker rm e74c92ee0f01
e74c92ee0f01
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
946ad8b067aa        centos              "/bin/bash"         15 minutes ago      Up 14 minutes                           dc3
[root@localhost ~]# docker exec -t 946ad8b067aa ls /dataVolume
dc2.txt  dc3.txt
上面,先使用“docker stop”停止dc2容器,“docker rm”删除dc2容器;最后使用“docker exec -t”命令查看dc3容器的/dataVolume目录,任然是可以访问的。


(4) 新建dc4继承dc3,再删除dc3,查看dc4的/dataVolume目录是否能够访问?能访问
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
946ad8b067aa        centos              "/bin/bash"         16 minutes ago      Up 16 minutes                           dc3
[root@localhost ~]# docker run -it --name dc4 --volumes-from dc3 centos
[root@b0daef3a3145 /]# ll /dataVolume/
total 0
-rw-r--r--. 1 root root 0 Jun 30 10:07 dc2.txt
-rw-r--r--. 1 root root 0 Jun 30 10:12 dc3.txt


上面新运行dc4容器,继承dc3容器。使用docker ps查看如下:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b0daef3a3145        centos              "/bin/bash"         54 seconds ago      Up 52 seconds                           dc4
946ad8b067aa        centos              "/bin/bash"         17 minutes ago      Up 17 minutes                           dc3

 

删除dc3容器,查看dc4的/dataVolume目录。如下:
[root@localhost ~]# docker stop 946ad8b067aa
946ad8b067aa
[root@localhost ~]# docker rm 946ad8b067aa
946ad8b067aa
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b0daef3a3145        centos              "/bin/bash"         2 minutes ago       Up 2 minutes                            dc4

 

上面成功删除了dc3容器。下面将使用“docker attach”进入到dc4容器,如下:
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b0daef3a3145        centos              "/bin/bash"         2 minutes ago       Up 2 minutes                            dc4
[root@localhost ~]# docker attach b0daef3a3145
[root@b0daef3a3145 /]# ll /dataVolume/
total 0
-rw-r--r--. 1 root root 0 Jun 30 10:07 dc2.txt
-rw-r--r--. 1 root root 0 Jun 30 10:12 dc3.txt
 
总结:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

 

 

 

  • 大小: 8.9 KB
分享到:
评论

相关推荐

    Docker 数据卷,数据卷容器详细介绍

    Docker 数据卷,数据卷容器详细介绍 引子 有些时候,我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作。 容器中管理...

    Docker数据卷容器创建及使用方法解析

    数据卷容器是一个专门用来挂载数据卷的容器,该容器主要是供其他容器引用和使用。所谓的数据卷容器,实际上就是一个普通的容器,举例如下: 创建数据卷容器 使用如下方式创建数据卷容器: docker run -itd -v /usr/...

    2. Docker数据卷与数据卷容器1

    容器与容器之间的数据共享容器与容器之间的数据共享有的时候,我们并不想指定挂载的宿主机的目录,或者说,我们只想实现容器与容器之间的数据共享,这就需要用到数据卷容器

    docker部署mysql容器自启动并挂载数据卷.pdf

    docker部署mysql容器自启动并挂载数据卷

    Docker数据卷和容器编排的使用

    Docker 数据卷和容器编排,记录下来! 数据卷 数据卷可以绕过拷贝系统,在多个容器之间、容器和宿主机之间共享目录或文件,数据卷绕过了拷贝系统,可以达到本地磁盘I/O性能。 运行容器时,指定一个数据卷 $ docker ...

    详解Docker数据管理(数据卷&数据卷容器)

    如何使用数据卷容器在容器和主机、容器和容器之间共享数据,并实现数据的备份和恢复。 数据卷 数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount操作。 数

    详解Docker 数据卷管理

    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data...4.使用数据卷容器共享数据 5.数据卷备份 一、创建数据卷 容器管理实验中我们学习的命令docker run用来创建容器,可以在使用改命令时

    Docker 数据卷及数据容器详细介绍及示例

    Docker 数据卷及数据容器 这两天开始学习docker,发现docker确实很强大,让网站部署和维护的效率大大提高。遂准备将手头维护的几个小站,全部docker化。整理的过程中感觉到,docker可以以功能或者进程为单位进行部署...

    带你了解什么是Docker容器数据卷

    带你了解什么是Docker容器数据卷

    虚拟化容器docker视频.zip

    03-docker的数据卷.mp4 04-手动制作docker镜像.mp4 05-自动构建docker镜像.mp4 docker-day3 01-从零开始编写kod项目dockerfile.mp4 02-dockerfile的指令讲解.mp4 03-docker镜像的分层.mp4 04-docker的容器互联.mp4 ...

    Docker 数据卷操作的实现

    数据卷可以绕过拷贝系统,在多个容器之间、容器和宿主机之间共享目录或者文件,数据卷绕过了拷贝系统,可以达到本地磁盘 I/O 性能。 本文先通过一个简单的案例向读者展示数据卷的基本用法。 以前面使用的 nginx 镜像...

    docker 数据卷之进阶篇

    笔者在《Docker 基础 : 数据管理》一文中介绍了 docker 数据卷(volume) 的基本用法。随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强。本文将在前文的基础上介绍 docker 数据卷的原理及一些高级...

    浅谈docker学习之docker数据卷(volume)

    1.什么是数据卷volume 为了了解什么是Docker Volume,首先我们需要明确Docker内的文件系统是如何工作的。Docker镜像被存储在一系列的只读层。当我们开启一个容器,Docker读取只读镜像并添加一个读写层在顶部。如果...

    Docker容器技术-数据卷与数据持久化.pptx

    Docker容器技术

    Docker容器数据卷原理及使用方法解析

    主要介绍了Docker容器数据卷原理及使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    《Docker技术集群与应用》2套期末考试卷AB卷带答案习题试卷模拟卷.pdf

    《Docker技术集群与应用》2套期末考试卷AB卷带答案习题试卷模拟卷.pdf

Global site tag (gtag.js) - Google Analytics