一、多個mysql數據同步
制作一個簡單的Dockerfile
FROM centos VOLUME ["volume1","volume2"] CMD /bin/bash
構建鏡像:
[root@yang docker]# docker build -t docker-volume .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM centos
---> 300e315adb2f
Step 2/3 : VOLUME ["volume1","volume2"]
---> Running in 9e5694642c1f
Removing intermediate container 9e5694642c1f
---> 3f15ce6c279b
Step 3/3 : CMD /bin/bash
---> Running in 22e9414e3283
Removing intermediate container 22e9414e3283
---> 3640a1790e5f
Successfully built 3640a1790e5f
Successfully tagged docker-volume:latest
查看鏡像:
[root@yang docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-volume latest 3640a1790e5f 10 seconds ago 209MB
示例:
1.啟動docker1,並進入容器
[root@yang docker]# docker run -it --name docker1 docker-volume
[root@922f59542774 /]# ls -la
total 0
drwxr-xr-x. 1 root root 36 Jan 27 09:20 .
drwxr-xr-x. 1 root root 36 Jan 27 09:20 ..
-rwxr-xr-x. 1 root root 0 Jan 27 09:20 .dockerenv
lrwxrwxrwx. 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x. 5 root root 360 Jan 27 09:20 dev
drwxr-xr-x. 1 root root 66 Jan 27 09:20 etc
drwxr-xr-x. 2 root root 6 Nov 3 15:22 home
lrwxrwxrwx. 1 root root 7 Nov 3 15:22 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64
drwx------. 2 root root 6 Dec 4 17:37 lost+found
drwxr-xr-x. 2 root root 6 Nov 3 15:22 media
drwxr-xr-x. 2 root root 6 Nov 3 15:22 mnt
drwxr-xr-x. 2 root root 6 Nov 3 15:22 opt
dr-xr-xr-x. 135 root root 0 Jan 27 09:20 proc
dr-xr-x---. 2 root root 162 Dec 4 17:37 root
drwxr-xr-x. 11 root root 163 Dec 4 17:37 run
lrwxrwxrwx. 1 root root 8 Nov 3 15:22 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Nov 3 15:22 srv
dr-xr-xr-x. 13 root root 0 Jan 26 10:35 sys
drwxrwxrwt. 7 root root 145 Dec 4 17:37 tmp
drwxr-xr-x. 12 root root 144 Dec 4 17:37 usr
drwxr-xr-x. 20 root root 262 Dec 4 17:37 var
drwxr-xr-x. 2 root root 6 Jan 27 09:20 volume1
drwxr-xr-x. 2 root root 6 Jan 27 09:20 volume2
[root@922f59542774 /]# cd volume1/
[root@922f59542774 volume1]# ls
[root@922f59542774 volume1]#
此時,進入卷volume1為空。
2.啟動docker2,使用命令--volumes-from 掛載到docker1上,並進入容器
[root@yang docker]# docker run -it --name docker2 --volumes-from docker1 docker-volume [root@bec4008354d7 /]# ls -la total 0 drwxr-xr-x. 1 root root 36 Jan 27 09:58 . drwxr-xr-x. 1 root root 36 Jan 27 09:58 .. -rwxr-xr-x. 1 root root 0 Jan 27 09:58 .dockerenv lrwxrwxrwx. 1 root root 7 Nov 3 15:22 bin -> usr/bin drwxr-xr-x. 5 root root 360 Jan 27 09:58 dev drwxr-xr-x. 1 root root 66 Jan 27 09:58 etc drwxr-xr-x. 2 root root 6 Nov 3 15:22 home lrwxrwxrwx. 1 root root 7 Nov 3 15:22 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64 drwx------. 2 root root 6 Dec 4 17:37 lost+found drwxr-xr-x. 2 root root 6 Nov 3 15:22 media drwxr-xr-x. 2 root root 6 Nov 3 15:22 mnt drwxr-xr-x. 2 root root 6 Nov 3 15:22 opt dr-xr-xr-x. 132 root root 0 Jan 27 09:58 proc dr-xr-x---. 2 root root 162 Dec 4 17:37 root drwxr-xr-x. 11 root root 163 Dec 4 17:37 run lrwxrwxrwx. 1 root root 8 Nov 3 15:22 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 Nov 3 15:22 srv dr-xr-xr-x. 13 root root 0 Jan 26 10:35 sys drwxrwxrwt. 7 root root 145 Dec 4 17:37 tmp drwxr-xr-x. 12 root root 144 Dec 4 17:37 usr drwxr-xr-x. 20 root root 262 Dec 4 17:37 var drwxr-xr-x. 2 root root 6 Jan 27 09:20 volume1 drwxr-xr-x. 2 root root 6 Jan 27 09:20 volume2 [root@bec4008354d7 /]# cd volume1/ [root@bec4008354d7 volume1]# ls
[root@bec4008354d7 volume1]#
創建完docker2后,在docker2卷volume1中創建一個文件,docker1中的volume1中也會實時同步到這個文件。
測試:
docker2容器內操作:
[root@bec4008354d7 volume1]# touch centos7
[root@bec4008354d7 volume1]# ls
centos7
[root@bec4008354d7 volume1]#
docker1容器內查看:
[root@922f59542774 /]# cd volume1/
[root@922f59542774 volume1]# ls
[root@922f59542774 volume1]# ls
centos7
[root@922f59542774 volume1]#
以上即可實現了,兩個容器間的數據實時同步!
3.啟動docker3,使用命令--volumes-from 掛載到docker1上,並進入容器
[root@yang ~]# docker run -it --name docker3 --volumes-from docker1 docker-volume [root@aa509e04c7b4 /]# ls -l total 0 lrwxrwxrwx. 1 root root 7 Nov 3 15:22 bin -> usr/bin drwxr-xr-x. 5 root root 360 Jan 27 10:10 dev drwxr-xr-x. 1 root root 66 Jan 27 10:10 etc drwxr-xr-x. 2 root root 6 Nov 3 15:22 home lrwxrwxrwx. 1 root root 7 Nov 3 15:22 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64 drwx------. 2 root root 6 Dec 4 17:37 lost+found drwxr-xr-x. 2 root root 6 Nov 3 15:22 media drwxr-xr-x. 2 root root 6 Nov 3 15:22 mnt drwxr-xr-x. 2 root root 6 Nov 3 15:22 opt dr-xr-xr-x. 139 root root 0 Jan 27 10:10 proc dr-xr-x---. 2 root root 162 Dec 4 17:37 root drwxr-xr-x. 11 root root 163 Dec 4 17:37 run lrwxrwxrwx. 1 root root 8 Nov 3 15:22 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 Nov 3 15:22 srv dr-xr-xr-x. 13 root root 0 Jan 26 10:35 sys drwxrwxrwt. 7 root root 145 Dec 4 17:37 tmp drwxr-xr-x. 12 root root 144 Dec 4 17:37 usr drwxr-xr-x. 20 root root 262 Dec 4 17:37 var drwxr-xr-x. 2 root root 21 Jan 27 10:05 volume1 drwxr-xr-x. 2 root root 6 Jan 27 09:20 volume2
docker3容器內查看:
[root@aa509e04c7b4 /]# cd volume1/
[root@aa509e04c7b4 volume1]# ls
centos7
[root@aa509e04c7b4 volume1]#
同理,docker3也實時同步了docker1中數據
在docker3中創建文件nginx,docker1中也能實現同步。如下:
docker3容器內創建:
[root@aa509e04c7b4 volume1]# touch nginx
[root@aa509e04c7b4 volume1]# ls
centos7 nginx
[root@aa509e04c7b4 volume1]#
docker1容器內查看:
[root@922f59542774 /]# cd volume1/
[root@922f59542774 volume1]# ls
centos7
[root@922f59542774 volume1]# ls
centos7 nginx
[root@922f59542774 volume1]#
二、刪除數據卷容器,數據是否存在?
1.如果刪除了docker1,docker2和docker3中的數據是否存在?
實驗:
# 查看現所有容器,docker1已經刪除
[root@yang docker]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aa509e04c7b4 docker-volume "/bin/sh -c /bin/bash" 24 minutes ago Up 24 minutes docker3 bec4008354d7 docker-volume "/bin/sh -c /bin/bash" 36 minutes ago Exited (0) 18 minutes ago docker2 00a30275a6db nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:32769->80/tcp nginx02 328790a86f3b nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:32768->80/tcp nginx01 8302f9872e0b mysql:8.0.20 "docker-entrypoint.s…" 25 hours ago Up 24 hours 33060/tcp, 0.0.0.0:3310->3306/tcp mysql01 b48ebcd4e34a jenkins/jenkins:2.249.3-lts-centos7 "/sbin/tini -- /usr/…" 6 weeks ago Up 24 hours 50000/tcp, 0.0.0.0:8081->8080/tcp jenkins
# 查看docker2 ,docker3容器內數據,是否存在:
docker2數據:
[root@bec4008354d7 /]# cd volume1/
[root@bec4008354d7 volume1]# ls
centos7 nginx
[root@bec4008354d7 volume1]#
docker3數據:
[root@aa509e04c7b4 volume1]# touch nginx
[root@aa509e04c7b4 volume1]# ls
centos7 nginx
[root@aa509e04c7b4 volume1]# ls
centos7 nginx
[root@aa509e04c7b4 volume1]#
實時證明,容器docker2,docker3中的數據是存在的,並沒有受到任何影響
三、總結
數據卷同步,就相當於拷貝,將數據實時拷貝到其他容器中,
容器之間配置信息的傳遞,數據卷容器的生命周期一直持續到沒有容器使用為止
但是你持久化到了本地,如果刪除了容器,本地數據會一直存在!