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 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数据管理与挂载管理的更多相关文章
- Docker入门-数据挂载
Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很 ...
- docker数据卷挂载
docker数据卷挂载笔记 我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: ...
- Docker Volume 之权限管理(转)
Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性: 持久化数据与容器的生命周期解耦:在容器删除之后数据卷中的内容可以保持.D ...
- Docker背后的容器管理——Libcontainer深度解析
Libcontainer 是Docker中用于容器管理的包,它基于Go语言实现,通过管理namespaces.cgroups.capabilities以及文件系统来进行容器控制.你可以使用Libcon ...
- Docker Volume 之权限管理(一)
摘要: Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性.然而Docker数据卷的权限管理经常是非常令人困惑的.本文将结合实 ...
- docker之安装和管理mongodb
前言 折腾一些使用docker来配置和管理mongodb和mongodb集群. 安装mongodb 从docker网站拉取mongodb镜像 docker search mongo # 选择一个版本 ...
- Docker Swarm——集群管理
前言 之前在总结docker machine的时候,当时对docker理解还不够深入,甚至还不知道 docker machine 与 docker swarm 的区别. 在查阅资料以及官方文档之后,今 ...
- Docker数据管理(四)
Docker数据管理 Docker数据分为两种: 数据卷 -v /data -v src:dst 数据卷容器 --volumes-from 数据卷 案例1:我们创建一个容器,起名叫nginx-volu ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
随机推荐
- Springboot整合MybatisPlus(超详细)完整教程~
新建springboot项目 开发工具:idea2019.2,maven3 pom.xml <dependency> <groupId>org.springframework. ...
- [Unity2d系列教程] 002.引用外部DLL - C
上一篇我们学习了Unity调用C#生成的外部DLL,但是有时候我们需要访问底层,不能不适用C生成的DLL.下面就让我们一起学习下,C如何生成. 1.创建一个C的控制台程序 2.点击确定->点击下 ...
- P1057 传球游戏 - 完美错解
//作者:pb2 博客:https://www.luogu.com.cn/blog/pb2/ 或 http://www.cnblogs.com/p2blog//博客新闻1:"WPS开机自启, ...
- sqlmap中文手册
Sqlmap中文手册 -Darren制作 零.前言 Sqlmap是十分著名的.自动化的SQL注入工具.为了较为系统地学习Sqlmap,我决定翻译一遍Sqlmap的用户手册,于是便有了此文.由于我英语 ...
- jchdl - GSL实例 - ComplementTwo(二的补码)
https://mp.weixin.qq.com/s/Gh2xJJvfg1SlyuayK4LRyQ 二的补码指对二进制数的所有位数整体求补.二进制运算下0,1互为补数,n位二进制数a的补数为2^n ...
- 数据库之 MySQL --- 数据处理 之 多行子查询(五)
[1]需求: 谁的工资比Abel 高?方式一: 第一步线查出Abel共子 第二部进行过滤 SELECT salary FROM employees WHERE last_name = 'Abel' ...
- Java实现 LeetCode 415 字符串相加
415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num ...
- Java实现 蓝桥杯VIP 算法提高 3-2求存款
算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ...
- Java实现 LeetCode 2 两数相加
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- Java实现 LeetCode_0038_CountandSay
package javaLeetCode.primary; import java.util.Scanner; public class CountandSay_38 { public static ...