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.如果是持久化到了本地(宿主机),这个时候,本地的数据是不会删除的








网友评论