Docker 數據卷容器(實現兩個或多個容器間數據同步)


一、多個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中的數據是存在的,並沒有受到任何影響

三、總結

數據卷同步,就相當於拷貝,將數據實時拷貝到其他容器中,

容器之間配置信息的傳遞,數據卷容器的生命周期一直持續到沒有容器使用為止

但是你持久化到了本地,如果刪除了容器,本地數據會一直存在!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM