专栏首页踏歌行的专栏Docker数据管理与挂载管理

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^-) !

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes K8S之SSL证书有效期修改

    Kubernetes默认的证书有效期都是1年,因此需要我们每年都更新证书,显然这对我们实际生产环境来说是很不友好的;因此我们要对Kubernetes的SSL证书...

    踏歌行
  • Saltstack_使用指南11_配置管理-状态之间依赖关系 4.1. 部署架构4.2. Apache和PHP的SLS【正向依赖】4.3. mariadb 的 SLS

    下文的案例是根据上一篇文章进行的修改。因此请优先读取上一篇文章内容《Saltstack_10_配置管理-状态模块》

    踏歌行
  • Linux下使用 github+hexo 搭建个人博客04-next主题优化

    本篇讲解 next 主题的优化,包括:使用语言、前端页面显示宽度、菜单、侧栏、头像、添加或取消动画效果、打赏功能等等。

    踏歌行
  • linux基础命令4

    创建文件夹 # mkdir note # ll -d note/ drwxr-xr-x. 2 root root 4096 Feb 22 15:53 note...

    零月
  • Centos7下部署两套python版本并存环境的操作记录

    需求说明: centos7.2系统的开发机器上已经自带了python2.7版本,但是开发的项目中用的是python3.5版本,为了保证Centos系统的正常运行...

    洗尽了浮华
  • 使用docker搭建一套开发环境全家桶

    DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一键安装程序。支持的服务丰富、功能强大、使用简单...

    A梦多啦A
  • LeetCode 450: 删除二叉搜索树中的节点 Delete Node in a BST

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节...

    爱写bug
  • Linux工作目录切换命令

    心跳包
  • 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kd...

    Michael阿明
  • 利用rbd命令把 ceph pool 中的一个镜像导出

    查看镜像 [root@node1 ~]# rbd ls images a56330e7-79d7-4639-a68f-366ac344bfe2 eccfee07...

    院长技术

扫码关注云+社区

领取腾讯云代金券