Datawhale-Docker學習筆記03-數據管理
作者:互联网
Docker數據管理
這篇主要將docker data的概念釐清與介紹如何在 Docker 內部以及容器之間管理數據;在容器中管理數據主要有兩種方式:數據卷(Volumes)、掛載主機目錄 (Bind mounts)
鏡像來源
1 [root@docker01 ~]# docker pull registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17
2 [root@docker01 ~]# docker tag ed21b7a8aee9 nginx:1.17
3 [root@docker01 ~]# docker images | grep 'nginx'
4 nginx 1.17 ed21b7a8aee9 2 weeks ago 127MB
5 registry.cn-beijing.aliyuncs.com/google_registry/nginx 1.17 ed21b7a8aee9 2 weeks ago 127MB
數據卷【-v, --volume】
數據卷 是一個可供 一個或多個容器 使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:
1、數據卷可以在容器之間共享和重用
2、對數據卷的修改會立馬生效
3、對數據卷的更新,不會影響鏡像
4、數據卷默認會一直存在,即使容器被刪除
注意: 數據卷的使用,類似於 Linux 下對目錄或文件進行 mount,鏡像中的被指定為掛載點的目錄中的文件會隱藏掉,能顯示看的是掛載的數據卷。
數據卷掛載方式1【推薦,常用】
本地主機掛載的目錄和文件
1 [root@docker01 ~]# mkdir -p /data/nginx_test2 # 在本地主機創建目錄,要掛載的目錄
2 [root@docker01 ~]# cat /etc/hosts # 要掛載的文件
3 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
5
6 # hosts info 2021-04-16
本地主機操作
宿主機操作
1 # /data/nginx_test2:/data_volume_test2 目錄掛載 前面:本地主機目錄; 後面:容器目錄
2 # /etc/hosts:/etc/hosts 文件掛載 前面:本地主機文件; 後面:容器文件
3 [root@docker01 ~]# docker run -d -v /data/nginx_test2:/data_volume_test2 -v /etc/hosts:/etc/hosts --name nginx102 nginx:1.17 # 發佈容器
4 [root@docker01 ~]# docker inspect nginx102 # 然後在 Mounts 查看信息
5 …………
6 "Mounts": [
7 {
8 "Type": "bind",
9 "Source": "/etc/hosts",
10 "Destination": "/etc/hosts",
11 "Mode": "",
12 "RW": true,
13 "Propagation": "rprivate"
14 },
15 {
16 "Type": "bind",
17 "Source": "/data/nginx_test2",
18 "Destination": "/data_volume_test2",
19 "Mode": "",
20 "RW": true,
21 "Propagation": "rprivate"
22 }
23 ],
24 …………
25 # 在本地主機的掛載目錄創建文件和目錄
26 [root@docker01 ~]# cd /data/nginx_test2/
27 [root@docker01 nginx_test2]# echo "aaa" > aaa
28 [root@docker01 nginx_test2]# mkdir abc
29 [root@docker01 nginx_test2]# ll
30 total 4
31 -rw-r--r-- 1 root root 4 Apr 18 16:41 aaa
32 drwxr-xr-x 2 root root 6 Apr 18 16:41 abc
容器操作
1 # 進入容器
2 [root@docker01 ~]# docker exec -it nginx102 bash
3 # 查看掛載目錄信息
4 root@8c8db5089c0e:/# ls
5 bin boot data_volume_test2 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
6 root@8c8db5089c0e:/# cd data_volume_test2/
7 root@8c8db5089c0e:/data_volume_test2# ls -l
8 total 4
9 -rw-r--r-- 1 root root 4 Apr 18 08:41 aaa
10 drwxr-xr-x 2 root root 6 Apr 18 08:41 abc
11 # 查看掛載文件信息
12 root@2537d3854b42:/# cat /etc/hosts
13 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
14 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
15
16 # hosts info 2020-04-18
數據卷掛載方式2【理解就好】
本地主機操作
1 [root@docker01 ~]# docker run -d -v /data_volume --name nginx101 nginx:1.17 # 發佈時,加入數據卷信息 -v /data_volume
2 594ea376d9301263046b13c72304af9c74a2a7516d0f3d8292f020ceba94742d
3 [root@docker01 ~]# docker ps
4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5 594ea376d930 nginx:1.17 "nginx -g 'daemon of…" 5 seconds ago Up 3 seconds 80/tcp nginx101
6 [root@docker01 ~]# docker inspect -f {{.Mounts}} nginx101 # 或者執行 docker inspect nginx101 然後在 Mounts 查看信息
7 [{volume b7bXXXX897 /var/lib/docker/volumes/b7bXXXX897/_data /data_volume local true }]
8 [root@docker01 ~]# cd /var/lib/docker/volumes/b7bXXXX897/_data # 進入數據卷目錄
9 [root@docker01 _data]# echo "1111" > 111 # 創建文件並寫入數據
10 [root@docker01 _data]# mkdir aaa/bbb -p # 創建多個目錄
進入容器操作
1 [root@docker01 ~]# docker exec -it nginx101 bash # 進入容器
2 root@594ea376d930:/# ls -l # 查看容器根目錄信息
3 total 8
4 drwxr-xr-x 2 root root 4096 Mar 27 00:00 bin
5 drwxr-xr-x 2 root root 6 Feb 1 17:09 boot
6 drwxr-xr-x 2 root root 6 Apr 17 14:35 data_volume # 存在該目錄
7 drwxr-xr-x 5 root root 340 Apr 17 14:35 dev
8 …………
9 root@594ea376d930:/# cd data_volume/ # 進入數據卷
10 root@594ea376d930:/data_volume# ls -l # 可見文件和目錄都在容器中存在
11 total 4
12 -rw-r--r-- 1 root root 5 Apr 17 14:44 111
13 drwxr-xr-x 3 root root 17 Apr 17 14:44 aaa
查看容器的掛載信息
1 root@594ea376d930:/# mount # 查看容器掛載信息
2 ………………
3 /dev/sda2 on /data_volume type xfs (rw,relatime,attr2,inode64,noquota) # 找到數據卷信息
4 ………………
掛載主機目錄【–mount】
包括 掛載目錄 和 掛載文件
本地機掛載的目錄和文件
1 [root@docker01 ~]# mkdir -p /data/nginx_test3 # 在本地主機創建目錄,要掛載的目錄
2 [root@docker01 ~]# cat /etc/hosts # 要掛載的文件
3 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
5
6 # hosts info 2020-04-18
本地主機操作
1 [root@docker01 ~]# docker run -d --mount type=bind,source=/data/nginx_test3,target=/data_volume_test3 --mount type=bind,source=/etc/hosts,target=/etc/hosts --name nginx103 nginx:1.17 # 發佈容器
2 [root@docker01 ~]# docker inspect nginx103 # 在Mounts可見容器的掛載信息
3 …………
4 "Mounts": [
5 {
6 "Type": "bind",
7 "Source": "/data/nginx_test3",
8 "Destination": "/data_volume_test3",
9 "Mode": "",
10 "RW": true,
11 "Propagation": "rprivate"
12 },
13 {
14 "Type": "bind",
15 "Source": "/etc/hosts",
16 "Destination": "/etc/hosts",
17 "Mode": "",
18 "RW": true,
19 "Propagation": "rprivate"
20 }
21 ],
22 …………
23 # 在宿主機的掛載目錄創建文件和目錄
24 [root@docker01 ~]# cd /data/nginx_test3/
25 [root@docker01 nginx_test3]# echo "123" > 123
26 [root@docker01 nginx_test3]# mkdir -p 111/222
27 [root@docker01 nginx_test3]# ll
28 total 4
29 drwxr-xr-x 3 root root 17 Apr 18 18:05 111
30 -rw-r--r-- 1 root root 4 Apr 18 18:05 123
31 [root@docker01 nginx_test3]# tree
32 .
33 ├── 111
34 │ └── 222
35 └── 123
36
37 2 directories, 1 file
容器操作
1 # 進入容器
2 [root@docker01 ~]# docker exec -it nginx103 bash
3 # 查看掛載目錄信息
4 root@c9427fcbc26c:/# ls
5 bin boot data_volume_test3 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
6 root@c9427fcbc26c:/# ls -l data_volume_test3/
7 total 4
8 drwxr-xr-x 3 root root 17 Apr 18 10:05 111
9 -rw-r--r-- 1 root root 4 Apr 18 10:05 123
10 # 查看掛載文件信息
11 root@c9427fcbc26c:/# cat /etc/hosts
12 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
13 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
14
15 # hosts info 2020-04-18
标签:03,筆記,data,目錄,Datawhale,nginx,docker01,掛載,root 来源: https://blog.csdn.net/tim861010/article/details/115764575