Docker數據管理與掛載方式

介紹如何在 Docker 內部以及容器之間管理數據;在容器中管理數據主要有兩種方式:數據卷(Volumes)、掛載主機目錄 (Bind mounts)

鏡像來源

[root@docker01 ~]# docker pull registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17
[root@docker01 ~]# docker tag ed21b7a8aee9 nginx:1.17
[root@docker01 ~]# docker images | grep 'nginx'
nginx                                                    1.17   ed21b7a8aee9   2 weeks ago   127MB
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【重點,常用】

包括掛載目錄掛載文件

宿主機掛載的目錄和文件
[root@docker01 ~]# mkdir -p /data/nginx_test2  # 在宿主機創建目錄,要掛載的目錄
[root@docker01 ~]# cat /etc/hosts              # 要掛載的文件
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

# hosts info 2020-04-18
宿主機操作
# /data/nginx_test2:/data_volume_test2  目錄掛載  前面:宿主機目錄; 後面:容器目錄
# /etc/hosts:/etc/hosts  文件掛載  前面:宿主機文件; 後面:容器文件
[root@docker01 ~]# docker run -d -v /data/nginx_test2:/data_volume_test2 -v /etc/hosts:/etc/hosts --name nginx102 nginx:1.17  # 發佈容器
[root@docker01 ~]# docker inspect nginx102   # 然後在 Mounts 查看信息
…………
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/etc/hosts",
                "Destination": "/etc/hosts",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/data/nginx_test2",
                "Destination": "/data_volume_test2",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
…………
# 在宿主機的掛載目錄創建文件和目錄
[root@docker01 ~]# cd /data/nginx_test2/
[root@docker01 nginx_test2]# echo "aaa" > aaa
[root@docker01 nginx_test2]# mkdir abc
[root@docker01 nginx_test2]# ll
total 4
-rw-r--r-- 1 root root 4 Apr 18 16:41 aaa
drwxr-xr-x 2 root root 6 Apr 18 16:41 abc
容器操作
# 進入容器
[root@docker01 ~]# docker exec -it nginx102 bash
# 查看掛載目錄信息
root@8c8db5089c0e:/# ls  
bin  boot  data_volume_test2  dev  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@8c8db5089c0e:/# cd data_volume_test2/
root@8c8db5089c0e:/data_volume_test2# ls -l
total 4
-rw-r--r-- 1 root root 4 Apr 18 08:41 aaa
drwxr-xr-x 2 root root 6 Apr 18 08:41 abc
# 查看掛載文件信息
root@2537d3854b42:/# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

# hosts info 2020-04-18

數據卷掛載方式2【瞭解】

宿主機操作
[root@docker01 ~]# docker run -d -v /data_volume --name nginx101 nginx:1.17   # 發佈時,加入數據卷信息 -v /data_volume
594ea376d9301263046b13c72304af9c74a2a7516d0f3d8292f020ceba94742d
[root@docker01 ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS    NAMES
594ea376d930   nginx:1.17     "nginx -g 'daemon of…"   5 seconds ago   Up 3 seconds   80/tcp   nginx101 
[root@docker01 ~]# docker inspect -f {{.Mounts}} nginx101   # 或者執行 docker inspect nginx101 然後在 Mounts 查看信息
[{volume b7bXXXX897 /var/lib/docker/volumes/b7bXXXX897/_data /data_volume local  true }]
[root@docker01 ~]# cd /var/lib/docker/volumes/b7bXXXX897/_data  # 進入數據卷目錄
[root@docker01 _data]# echo "1111" > 111  # 創建文件並寫入數據
[root@docker01 _data]# mkdir aaa/bbb -p   # 創建多個目錄
進入容器操作
[root@docker01 ~]# docker exec -it nginx101 bash   # 進入容器
root@594ea376d930:/# ls -l   # 查看容器根目錄信息
total 8
drwxr-xr-x   2 root root 4096 Mar 27 00:00 bin
drwxr-xr-x   2 root root    6 Feb  1 17:09 boot
drwxr-xr-x   2 root root    6 Apr 17 14:35 data_volume  # 存在該目錄
drwxr-xr-x   5 root root  340 Apr 17 14:35 dev
…………
root@594ea376d930:/# cd data_volume/   # 進入數據卷
root@594ea376d930:/data_volume# ls -l  # 可見文件和目錄都在容器中存在
total 4
-rw-r--r-- 1 root root  5 Apr 17 14:44 111
drwxr-xr-x 3 root root 17 Apr 17 14:44 aaa

查看容器的掛載信息

root@594ea376d930:/# mount  # 查看容器掛載信息
………………
/dev/sda2 on /data_volume type xfs (rw,relatime,attr2,inode64,noquota)   # 找到數據卷信息
………………

掛載主機目錄【--mount】

包括掛載目錄掛載文件

宿主機掛載的目錄和文件
[root@docker01 ~]# mkdir -p /data/nginx_test3  # 在宿主機創建目錄,要掛載的目錄
[root@docker01 ~]# cat /etc/hosts              # 要掛載的文件
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

# hosts info 2020-04-18
宿主機操作
[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   # 發佈容器
[root@docker01 ~]# docker inspect nginx103  # 在Mounts可見容器的掛載信息
…………
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/data/nginx_test3",
                "Destination": "/data_volume_test3",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/etc/hosts",
                "Destination": "/etc/hosts",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
…………
# 在宿主機的掛載目錄創建文件和目錄
[root@docker01 ~]# cd /data/nginx_test3/
[root@docker01 nginx_test3]# echo "123" > 123
[root@docker01 nginx_test3]# mkdir -p 111/222
[root@docker01 nginx_test3]# ll
total 4
drwxr-xr-x 3 root root 17 Apr 18 18:05 111
-rw-r--r-- 1 root root  4 Apr 18 18:05 123
[root@docker01 nginx_test3]# tree 
.
├── 111
│   └── 222
└── 123

2 directories, 1 file
容器操作
# 進入容器
[root@docker01 ~]# docker exec -it nginx103 bash
# 查看掛載目錄信息
root@c9427fcbc26c:/# ls  
bin  boot  data_volume_test3  dev  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@c9427fcbc26c:/# ls -l data_volume_test3/
total 4
drwxr-xr-x 3 root root 17 Apr 18 10:05 111
-rw-r--r-- 1 root root  4 Apr 18 10:05 123
# 查看掛載文件信息
root@c9427fcbc26c:/# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

# hosts info 2020-04-18

完畢!


———END———
如果覺得不錯就關注下唄 (-^O^-) !

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章