美文网首页
Docker 数据卷容器(多个容器之间实现数据共享)

Docker 数据卷容器(多个容器之间实现数据共享)

作者: 程序猿02578 | 来源:发表于2026-03-03 15:42 被阅读0次
image.png

启动3个容器(可以使用自己构建的镜像)

# 查看镜像
[root@liuyi /]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED       SIZE
nginx                 latest    605c77e624dd   4 years ago   141MB
tomcat                9.0       b8e65a4d736d   4 years ago   680MB
mysql                 latest    3218b38490ce   4 years ago   516MB
hello-world           latest    feb5d9fea6a5   4 years ago   13.3kB
liuyi/centos          1.0       88a327c6cfee   4 years ago   231MB
centos                latest    5d0da3dc9764   4 years ago   231MB
portainer/portainer   latest    580c0e4e98b0   4 years ago   79.1MB

# 启动自己构建的容器 内含volume01、volume02文件夹
[root@liuyi /]# docker run -it --name docker01 liuyi/centos:1.0
[root@6c952dae6061 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01  volume02
[root@6c952dae6061 /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  360 Mar  4 06:41 dev
drwxr-xr-x   1 root root 4096 Mar  4 06:41 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15  2021 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 148 root root    0 Mar  4 06:41 proc
dr-xr-x---   2 root root 4096 Sep 15  2021 root
drwxr-xr-x  11 root root 4096 Sep 15  2021 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Mar  2 06:57 sys
drwxrwxrwt   7 root root 4096 Sep 15  2021 tmp
drwxr-xr-x  12 root root 4096 Sep 15  2021 usr
drwxr-xr-x  20 root root 4096 Sep 15  2021 var
drwxr-xr-x   2 root root 4096 Mar  4 06:41 volume01
drwxr-xr-x   2 root root 4096 Mar  4 06:41 volume02

# Ctrl + P + Q 退出当前容器   查看正在运行的容器
[root@6c952dae6061 /]# [root@liuyi /]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                                     NAMES
6c952dae6061   liuyi/centos:1.0   "/bin/sh -c /bin/bash"   3 minutes ago   Up 3 minutes                                             docker01
---------------------------------------------------------------------
# 再启动一个容器docker02 挂载至 docker01
[root@liuyi /]# docker run -it --name docker02 --volumes-from docker01 liuyi/centos:1.0
[root@0a7494e38676 /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  360 Mar  4 06:48 dev
drwxr-xr-x   1 root root 4096 Mar  4 06:48 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15  2021 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 136 root root    0 Mar  4 06:48 proc
dr-xr-x---   2 root root 4096 Sep 15  2021 root
drwxr-xr-x  11 root root 4096 Sep 15  2021 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Mar  2 06:57 sys
drwxrwxrwt   7 root root 4096 Sep 15  2021 tmp
drwxr-xr-x  12 root root 4096 Sep 15  2021 usr
drwxr-xr-x  20 root root 4096 Sep 15  2021 var
drwxr-xr-x   2 root root 4096 Mar  4 06:41 volume01
drwxr-xr-x   2 root root 4096 Mar  4 06:41 volume02
[root@0a7494e38676 /]# 

# 窗口2 容器docker01(新开窗口) 进入容器docker01
[root@liuyi /]# docker attach 6c952dae6061
[root@6c952dae6061 /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  360 Mar  4 06:41 dev
drwxr-xr-x   1 root root 4096 Mar  4 06:41 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15  2021 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 134 root root    0 Mar  4 06:41 proc
dr-xr-x---   2 root root 4096 Sep 15  2021 root
drwxr-xr-x  11 root root 4096 Sep 15  2021 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Mar  2 06:57 sys
drwxrwxrwt   7 root root 4096 Sep 15  2021 tmp
drwxr-xr-x  12 root root 4096 Sep 15  2021 usr
drwxr-xr-x  20 root root 4096 Sep 15  2021 var
drwxr-xr-x   2 root root 4096 Mar  4 06:41 volume01
drwxr-xr-x   2 root root 4096 Mar  4 06:41 volume02

# 窗口2 容器docker01 进入volume01目录下创建docker01文件
[root@6c952dae6061 /]# cd volume01
[root@6c952dae6061 volume01]# touch docker01 
[root@6c952dae6061 volume01]# ls
docker01
[root@6c952dae6061 volume01]# 

# 窗口1 容器docker02(之前的窗口) 进入volume01目录下查看 发现已经同步了 docker01文件
[root@0a7494e38676 /]# cd volume01
[root@0a7494e38676 volume01]# ls
docker01
[root@0a7494e38676 volume01]# 
---------------------------------------------------------------------
# 再启动一个容器 docker03 挂载至 docker01  进入容器后查看volume01目录 发现已直接同步了docker01文件
[root@liuyi /]# docker run -it --name docker03 --volumes-from docker01 liuyi/centos:1.0
[root@a635687ea12d /]# ls -l
total 56
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  360 Mar  4 07:02 dev
drwxr-xr-x   1 root root 4096 Mar  4 07:02 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15  2021 lost+found
drwxr-xr-x   2 root root 4096 Nov  3  2020 media
drwxr-xr-x   2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x   2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 136 root root    0 Mar  4 07:02 proc
dr-xr-x---   2 root root 4096 Sep 15  2021 root
drwxr-xr-x  11 root root 4096 Sep 15  2021 run
lrwxrwxrwx   1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x  13 root root    0 Mar  2 06:57 sys
drwxrwxrwt   7 root root 4096 Sep 15  2021 tmp
drwxr-xr-x  12 root root 4096 Sep 15  2021 usr
drwxr-xr-x  20 root root 4096 Sep 15  2021 var
drwxr-xr-x   2 root root 4096 Mar  4 06:52 volume01
drwxr-xr-x   2 root root 4096 Mar  4 06:41 volume02
[root@a635687ea12d /]# cd volume01
[root@a635687ea12d volume01]# ls
docker01
[root@a635687ea12d volume01]# 

# 在 docker03 的 volume01 目录下创建 docker03 文件
[root@a635687ea12d volume01]# touch docker03
[root@a635687ea12d volume01]# ls
docker01  docker03
[root@a635687ea12d volume01]# 

# 回到docker01容器下查看 volume01 目录 发现已同步了 docker03 文件
[root@6c952dae6061 volume01]# ls
docker01  docker03
[root@6c952dae6061 volume01]# 
---------------------------------------------------------------------
# 删除docker01容器 docker02 与 docker03 中同步的文件还在
[root@liuyi /]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS     NAMES
a635687ea12d   liuyi/centos:1.0   "/bin/sh -c /bin/bash"   8 minutes ago   Up 8 minutes             docker03
[root@liuyi /]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS                       PORTS     NAMES
a635687ea12d   liuyi/centos:1.0      "/bin/sh -c /bin/bash"   8 minutes ago    Up 8 minutes                           docker03
0a7494e38676   liuyi/centos:1.0      "/bin/sh -c /bin/bash"   22 minutes ago   Exited (127) 9 minutes ago             docker02
6c952dae6061   liuyi/centos:1.0      "/bin/sh -c /bin/bash"   29 minutes ago   Exited (0) 18 seconds ago              docker01
[root@liuyi /]# docker rm -f 6c952dae6061
6c952dae6061
[root@liuyi /]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS                       PORTS     NAMES
a635687ea12d   liuyi/centos:1.0      "/bin/sh -c /bin/bash"   9 minutes ago    Up 9 minutes                           docker03
0a7494e38676   liuyi/centos:1.0      "/bin/sh -c /bin/bash"   22 minutes ago   Exited (127) 9 minutes ago             docker02

# 回到 docker03 容器 查看volume01目录 发现docker01 和 docker03 文件还在
[root@a635687ea12d volume01]# ls
docker01  docker03
[root@a635687ea12d volume01]# 

实际应用

# 多个mysql实现数据共享
[root@liuyi /]# docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

注:
1.docker02 --volumes-from docker01 类似java中的 Son extend Father
2.通过 --volumes-from 就可以实现容器间的数据共享
3.多个容器共享时,删除了其它容器,只要还有一个容器在数据就不会丢失,所以这个“共享”实际属于拷贝的概念,是被 双向 拷贝复制到了另一个容器上
4.容器之间信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止
5.如果是持久化到了本地(宿主机),这个时候,本地的数据是不会删除的

相关文章

  • 六、数据卷管理

    拷贝数据到容器中 docker的数据卷实现持久化存储 volume实现容器和宿主机数据共享 在容器启动时,通过-v...

  • Docker管理-容器的数据卷

    1、手工交互数据 2、数据卷目录    作用:实现宿主机和容器之间的数据共享,数据持久化 3、数据卷容器    作...

  • volume和bind mount 优缺点

    Volume特点: • 多个运行容器之间共享数据。 • 当容器停止或被移除时,该卷依然存在。 • 多个容器可以同时...

  • 【现学现忘Docker基础】— 21.Docker容器数据卷(一

    1、什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷)。 当Docker容器...

  • 【现学现忘Docker基础】— 27.数据卷容器

    1、数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现数据共享。那么...

  • 容器数据卷

    一、什么是容器数据卷 对容器内的数据做持久化,防止容器内的数据丢失。还可以实现在容器之间共享或重用数据 。同样也可...

  • Docker-13-数据卷

    述 数据卷,可以绕过拷贝系统,在多个容器之间,或者容器和宿主机之间共享目录或者文件,数据卷绕过了拷贝系统,可以达到...

  • 6、Docker数据管理

    在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管...

  • Docker容器的数据管理

    在使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理...

  • docker容器数据卷

    容器持久化及数据共享 1. 容器数据卷用v命令添加 docker run -it -v /宿主机绝对路径:/容器绝...

网友评论

      本文标题:Docker 数据卷容器(多个容器之间实现数据共享)

      本文链接:https://www.haomeiwen.com/subject/ehsadstx.html