zoukankan      html  css  js  c++  java
  • Docker数据管理与挂载管理

    介绍如何在 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 2020-04-18

    宿主机操作

     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

    完毕!


    ———END———
    如果觉得不错就关注下呗 (-^O^-) !

     

  • 相关阅读:
    Git的搭建和使用技巧完整精华版
    Apache配置虚拟主机
    php curl向远程服务器上传文件
    将树形结构的数组按照顺序遍历为二维数组
    编码-截取中文-去除HTML字符
    PHP最原始的上传文件函数
    PHP中获取当前页面的完整URL
    ethereum/EIPs-191 Signed Data Standard
    ethereum/EIPs-607 Hardfork Meta: Spurious Dragon硬分叉相关
    ethereum/EIPs-155 Simple replay attack protection 35,36
  • 原文地址:https://www.cnblogs.com/zhanglianghhh/p/13155282.html
Copyright © 2011-2022 走看看