介绍如何在 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 weeks ago 127MB
registry.cn-beijing.aliyuncs.com/google_registry/nginx 1.17 ed21b7a8aee9 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
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 # hosts info --

宿主机操作

 # /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
-rw-r--r-- root root Apr : aaa
drwxr-xr-x root root Apr : 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
-rw-r--r-- root root Apr : aaa
drwxr-xr-x root root Apr : abc
# 查看挂载文件信息
root@2537d3854b42:/# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 # hosts info --

数据卷挂载方式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…" seconds ago Up seconds /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 "" > # 创建文件并写入数据
[root@docker01 _data]# mkdir aaa/bbb -p # 创建多个目录

进入容器操作

 [root@docker01 ~]# docker exec -it nginx101 bash   # 进入容器
root@594ea376d930:/# ls -l # 查看容器根目录信息
total
drwxr-xr-x root root Mar : bin
drwxr-xr-x root root Feb : boot
drwxr-xr-x root root Apr : data_volume # 存在该目录
drwxr-xr-x root root Apr : dev
…………
root@594ea376d930:/# cd data_volume/ # 进入数据卷
root@594ea376d930:/data_volume# ls -l # 可见文件和目录都在容器中存在
total
-rw-r--r-- root root Apr :
drwxr-xr-x root root Apr : 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
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 # hosts info --

宿主机操作

 [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 "" >
[root@docker01 nginx_test3]# mkdir -p /
[root@docker01 nginx_test3]# ll
total
drwxr-xr-x root root Apr :
-rw-r--r-- root root Apr :
[root@docker01 nginx_test3]# tree
.
├──
│ └──
└── directories, 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
drwxr-xr-x root root Apr :
-rw-r--r-- root root Apr :
# 查看挂载文件信息
root@c9427fcbc26c:/# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 # hosts info --

完毕!


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

Docker数据管理与挂载管理的更多相关文章

  1. Docker入门-数据挂载

    Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很 ...

  2. docker数据卷挂载

    docker数据卷挂载笔记 我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: ...

  3. Docker Volume 之权限管理(转)

    Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性: 持久化数据与容器的生命周期解耦:在容器删除之后数据卷中的内容可以保持.D ...

  4. Docker背后的容器管理——Libcontainer深度解析

    Libcontainer 是Docker中用于容器管理的包,它基于Go语言实现,通过管理namespaces.cgroups.capabilities以及文件系统来进行容器控制.你可以使用Libcon ...

  5. Docker Volume 之权限管理(一)

    摘要: Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性.然而Docker数据卷的权限管理经常是非常令人困惑的.本文将结合实 ...

  6. docker之安装和管理mongodb

    前言 折腾一些使用docker来配置和管理mongodb和mongodb集群. 安装mongodb 从docker网站拉取mongodb镜像 docker search mongo # 选择一个版本 ...

  7. Docker Swarm——集群管理

    前言 之前在总结docker machine的时候,当时对docker理解还不够深入,甚至还不知道 docker machine 与 docker swarm 的区别. 在查阅资料以及官方文档之后,今 ...

  8. Docker数据管理(四)

    Docker数据管理 Docker数据分为两种: 数据卷 -v /data -v src:dst 数据卷容器 --volumes-from 数据卷 案例1:我们创建一个容器,起名叫nginx-volu ...

  9. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

随机推荐

  1. 使用websocket开发智能聊天机器人

    前面我们学习了异步web框架(sanic)和http异步调用库httpx,今天我们学习websocket技术. websocket简介 我们知道HTTP协议是:请求->响应,如果没有响应就一直等 ...

  2. [转]什么是OpenSSH

    定义 SSH是什么? 相关概念 OpenSSH安全吗?究竟安全在哪里呢? Telnet这么好的一个工具为什么还要用户手动开启呢? SSH账户类型 iPhone中修改密码的大致步骤 如何从电脑连接通过S ...

  3. [工具推荐]001.FlipPDF使用教程

    FlipPDF是一个什么样的软件呢,他有什么实际用途呢?顾名思义,这是一个跟PDF有关的软件,没错它是一款把PDF转换成酷炫书籍的软件,他还支持PDF中的目录,也就是转换成的书籍,目录一样可以跳转的. ...

  4. 【题解】P6218 [USACO06NOV] Round Numbers S

    题目传送门 这是一道数位DP. 令 \(dp_{i,j,k}\) 为满足由 \(i\) 位组成,且其中有 \(j\) 个1,第 i 位(从右往左数)为 \(k\) 的二进制数的数量. 可以得出状态转移 ...

  5. 舵机MX-64AR与MX-28AR驱动

    背景:硬件采用485通信,在tb上采购的无需收发控制的串口转RS485模块(485通信为半双工,一般情况需要控制收发模式).在使用该模块后,即可完全使用一个普通地串口来对485通信的舵机进行操作. 模 ...

  6. Beta冲刺——凡事预则立

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 1.讨论组长是否重选的议题和结论 经过讨论 ...

  7. Rocket - decode - SimplifyDC

    https://mp.weixin.qq.com/s/4uWqBRrMVG6FlnBKmw8U-w   介绍SimplifyDC如何简化解码逻辑.     1. 使用   ​​   简化从mint和m ...

  8. js在运算时的类型转换

    日期类型与数字类型的运算 在加法时将日期对象与数字都当作字符串进行连接 字符串的运算方式中没有减法.乘法.除法.转化成数字类型进行运算 字符串类型字符与数字类型的运算 在加法时将二者都转换成字符串进行 ...

  9. Linux(十) —— 使用 rz 和 sz 命令上传与下载

    以CentOS 7 系统为例,一般上传下载都是使用的第三方工具,但是在操作上并不方便,每次都要找到对应的目录才可以执行上传.下载操作,比较麻烦. 而CentOS为例的 Linux 系统可以通过安装 插 ...

  10. Java实现 LeetCode 222 完全二叉树的节点个数

    222. 完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集 ...