docker_info_03_volume 数据卷管理

docker_info_03_volume 数据卷管理

3.1.docker 目录挂载命令

  • 命令实例:
docker run -it --name volume02 -h zsdocker02 -v /server centos      # 不指定宿主机目录
docker run -it --name volume01 -h zsdocker01 -v /hostdir:/dockedir  centos

# 以下2种选项,可以加只读参数,保护宿主机数据
-v /dockerdir            # 创建容器目录/dockerdir挂载到宿主机系统
-v /hostdir:/dockerdir   # 宿主机目录/容器目录
  • 注意:
1)使用 -v 参数挂载目录时,容器目录和宿主机目录不存在时会自动创建

2)挂载文件时,源文件必须存在,否则会创建以该文件名命名的目录

3)宿主机的目录可以使用相对路径,默认的工作目录在 /var/lib/docker/volumes/,而不是当前所在的目录
docker run -it --name volume01 -v hostdir:/dockedir centos /bin/bash

4)容器目录不可以为相对路径,如下命令是错误的:
docker run -it --name volume01 -v /hostdir:dockedir centos /bin/bash

5)通过以下命令的 Mounts 字段可以看出挂载目录的具体信息
# docker inspect volume02 | grep Mounts -A 10       # 可用
# docker inspect -f {{.Config.Volumes} volume02    # 失败
docker inspect {{.volume}} volume02
docker inspect volume02

6)如果在docker中修改了挂载目录的属主信息,宿主机中对应目录的属主会修改为与容器中属主UID相同的用户

7)删除容器,挂载的目录是否会删除?
删除容器该宿主机目录不会被删除,随机名称的挂载目录也不会被删除

3.2.docker 目录挂载实例演示

3.2.1.挂载指定的宿主机目录到容器中

docker run -it --name volume01 -h zsdocker01 -v /server:/server  centos
---------------------------------
[root@zuiyoujie ~]# cd /server
[root@zuiyoujie server]# echo 002 >002.txt     # 创建测试文件
[root@zuiyoujie server]# docker run -it --name volume01 -h zsdocker01 -v /server:/server  centos
[root@zsdocker01 /]# cd /server
[root@zsdocker01 server]# ll
total 4
-rw-r--r-- 1 root root 7 Aug 22 09:22 002.txt
[root@zsdocker01 server]# ls 002.txt            # 查看测试文件
---------------------------------

3.2.2.挂载时不指定宿主机的目录

  • 只使用docker容器的目录
docker run -it --name volume02 -h zsdocker02 -v /server centos
-------------------------------------
[root@zuiyoujie tools]# docker run -it --name volume02 -h zsdocker02 -v /server centos     # 创建挂载目录的容器volume02
[root@zsdocker02 /]# cd /server/
[root@zsdocker02 server]# ll
total 0
[root@zsdocker02 server]# touch aaa.txt bbb.txt 20180822.txt    # 创建测试文件
[root@zsdocker02 server]# mkdir -p {ccc,ddd}                    # 创建测试目录
[root@zsdocker02 server]# ll                                    # 检查
total 0
-rw-r--r-- 1 root root 0 Aug 28 16:02 20180822.txt
-rw-r--r-- 1 root root 0 Aug 28 16:02 aaa.txt
-rw-r--r-- 1 root root 0 Aug 28 16:02 bbb.txt
drwxr-xr-x 2 root root 6 Aug 28 16:02 ccc
drwxr-xr-x 2 root root 6 Aug 28 16:02 ddd
[root@zsdocker02 server]# exit

# 查看挂载目录的真实位置
[root@zuiyoujie tools]# docker inspect volume02 | grep Mounts -A 10
--------------------------------------------------------
        "Mounts": [
            {
                "Type": "volume",
                "Name": "eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034",
                "Source": "/var/lib/docker/volumes/eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034/_data",
                "Destination": "/server",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
--------------------------------------------------------
[root@zuiyoujie ~]# docker inspect -f {{Volumes}} volume02         # 失败
map[/data:/var/lib/docker/volumes/47491b6ed876e3e160cd4a50aabbbcf06ea24e2adf9122b0760addd96ba96567/_data]
[root@zuiyoujie ~]# cd /var/lib/docker/volumes/                    # 进入docker容器数据卷目录
[root@zuiyoujie volumes]# ll                       # 下面这个随机名的目录就是volume02容器/data挂载到宿主机的目录
total 28
drwxr-xr-x 3 root root  4096 Aug 22 16:51 eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034
-rw------- 1 root root 32768 Aug 22 16:51 metadata.db
[root@zuiyoujie volumes]# cd eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034/
[root@zuiyoujie eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034]# ll
total 4
drwxr-xr-x 4 root root 4096 Aug 22 16:53 _data          # 里面的_data目录对应/data
[root@zuiyoujie eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034]# cd _data/
[root@zuiyoujie _data]# ll                 # 可以在宿主机中看到刚才创建的文件和目录
total 8
-rw-r--r-- 1 root root    0 Aug 22 16:53 20180822.txt
-rw-r--r-- 1 root root    0 Aug 22 16:53 aaa.txt
-rw-r--r-- 1 root root    0 Aug 22 16:53 bbb.txt
drwxr-xr-x 2 root root 4096 Aug 22 16:53 ccc
drwxr-xr-x 2 root root 4096 Aug 22 16:53 ddd
----------------------------

3.2.3.以只读方式挂载指定目录

docker run -it --name volume03 -h zsdocker-03 -v /opt/tools/:/opt/tools/:ro centos
----------------------------
[root@zuiyoujie tools]# docker run -it --name volume03 -h zsdocker-03 -v /opt/tools/:/opt/tools/:ro centos
[root@zsdocker-03 /]# cd /opt/tools/
[root@zsdocker-03 tools]# ls
Python-3.6.2  Python-3.6.2.tgz  docker-ce-18.06.1.ce-3.el7.x86_64.rpm
[root@zsdocker-03 tools]# touch ee
touch: cannot touch 'ee': Read-only file system
----------------------------

3.2.4.挂载一个已经存在的数据卷

docker run -it --name volume04 --volumes-from volume01 -h zsdocker-04 centos
--volumes-from      # 读取某个数据卷容器
-i                  # 让终端保持打开状态
-t                  # 启动终端
-----------------------------
[root@zuiyoujie tools]# docker run -it --name volume04 --volumes-from volume02 -h zsdocker-04 centos
[root@zsdocker-04 /]# cd /server/
[root@zsdocker-04 server]# ls
20180822.txt  aaa.txt  bbb.txt  ccc  ddd

# 在物理机上面查看创建的文件和目录
[root@zuiyoujie _data]# ll /var/lib/docker/volumes/eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034/_data/
总用量 0
-rw-r--r-- 1 root root 0 8月  29 00:02 20180822.txt
-rw-r--r-- 1 root root 0 8月  29 00:02 aaa.txt
-rw-r--r-- 1 root root 0 8月  29 00:02 bbb.txt
drwxr-xr-x 2 root root 6 8月  29 00:02 ccc
drwxr-xr-x 2 root root 6 8月  29 00:02 ddd
----------------------------------------

END

posted @ 2020-10-30 14:55  天生帅才  阅读(136)  评论(0编辑  收藏  举报
// 百度统计