`

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部署mysql容器自启动并挂载数据卷.pdf

    Docker 部署 MySQL 容器自启动并挂载数据卷 Docker 是一个流行的容器化平台,提供了轻量级、可移植的解决方案来部署应用程序。 MySQL 是一个流行的开源关系数据库管理系统,广泛应用于各种应用程序中。本文将介绍...

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

    这是因为Docker数据卷默认是持久化的,它们独立于容器的生命周期,可以在容器之间共享和传递。 **数据卷容器的查看** 通过`docker inspect`命令,我们可以查看容器的详细信息,包括数据卷的配置。在`mydata`、`...

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

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

    Docker修改数据目录及相关配置.docx

    Docker 是一个流行的开源平台,用于构建、部署和运行应用程序的容器化解决方案。它通过将应用程序及其依赖项封装在一个轻量级的可移植容器中,实现了跨不同环境的无缝迁移。在本文中,我们将深入探讨如何修改Docker...

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

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

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

    数据卷是容器内数据直接映射到本地宿主机的方式,而数据卷容器是使用特定容器维护数据卷的方式,即专门用一个容器当作数据卷来使用。 四、容器数据卷的特征 容器数据卷有以下几个特征: 1. 在多个容器之间共享...

    docker挂载本地目录和数据卷容器操作

    在 Docker 中挂载本地目录和使用数据卷容器是两个关键的操作,用于持久化数据和实现容器间的共享。 1. **Docker 挂载本地目录** Docker 提供了 `-v` 参数来将宿主机的目录挂载到容器内部。例如: - `docker run -...

    Docker容器的数据卷:持久化存储的秘诀

    综上所述,Docker数据卷是解决容器数据持久化问题的强大工具。它们不仅提供了一种简单而有效的方式来存储和管理容器数据,而且还可以使得容器化应用更加灵活和可靠。通过掌握数据卷的使用方法,开发者能够构建更加...

    使用IDEA远程管理docker镜像及容器服务.pdf

    用户可以查看容器的基本信息、镜像的基本信息、网络信息、数据卷信息等。 六、docker容器和镜像管理 使用IDEA编辑器远程管理docker镜像及容器服务,可以实现 docker容器和镜像的基本操作,例如启动、停止、删除...

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

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

    Docker容器技术-数据卷的类型与区别.pptx

    Docker 容器技术中的数据卷类型和区别 Docker 容器技术中的数据卷是一种用于数据持久化和共享的机制。数据卷是 Docker 容器技术中的一种核心概念,它允许容器之间共享数据,并且可以将数据持久化到宿主机文件系统中...

    Docker容器技术-数据卷的创建与管理.pptx

    Docker数据卷是容器持久化数据的关键,通过命名卷和挂载卷两种方式,可以根据实际需求灵活管理和存储容器内的数据。命名卷提供了可重用性和跨容器共享的能力,而挂载卷则方便快速地利用宿主机资源。了解并熟练掌握这...

    Dockerfile指令与Docker-compose容器编排-搭建docker私有仓库.doc

    例如,我们可以使用 Docker 的卷功能将应用程序的配置文件和数据目录映射到容器外部。 五、迁移与备份 迁移与备份是 Docker 容器的重要功能。我们可以使用 Docker 的容器保存为镜像功能来实现容器的迁移和备份。 ...

    跨越障碍:彻底解决Docker数据卷挂载难题

    Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中。这个容器可以在任何支持Docker的机器上运行,确保了应用在不同环境中的一致性。 ### Docker的主要特点包括...

Global site tag (gtag.js) - Google Analytics