[TOC]
## 一、Docker数据管理
### 1、容器中的管理数据主要有两种方式
```
1、数据卷:是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。
2、数据卷容器:使用特定容器维护数据卷。
```
## 二、数据卷
### 1、数据卷拥有以下好处
```
数据卷的设计目的是数据的持久化。
1、数据卷可以在容器之间共享和重用数据;
2、对数据卷内数据的修改会立马生效,无论是在容器内操作还是本地操作;
3、对数据卷的更新不会影响镜像;
4、数据卷的生命周期一直持续到没有容器使用它为止;
5、数据卷可以完成容器到宿主机、宿主机到容器以及容器到容器之间的数据共享。
```
### 2、数据卷的挂载方式
```
1. 指定路径挂载
格式:-v 宿主机路径:容器内路径
形如:-v /opt/data:/opt/data
2. 具名挂载
格式:-v 卷名:容器内路径
形如:-v mysql:/var/lib/mysql
3. 匿名挂载
格式:-v 容器内路径
形如:-v /var/lib/mysql
说明:
1、指定路径挂载和具名/匿名挂载的区别在于,指定路径挂载自定义了挂载路径,而具名/匿名挂载使用的是默认路径;
2、具名挂载和匿名挂载都没有指定宿主机目录,数据卷默认存放位置/var/lib/docker/volumes/xxxx/_data
3、具名挂载和匿名挂载的区别在于,具名挂载定义了卷的名称,好区分,而匿名挂载使用系统分配的长串字符。
```
#### 2.1 指定路径挂载
```
1. 语法:
docker run -v 宿主机路径:容器内路径 IMAGE:TAG
2. 选项:
-it 以交互方式运行启动的容器;
-d 后台运行;(运行Nginx、Tomcat等服务时加);
-p 端口映射,格式为,主机端口:容器端口,即本地端口映射到容器端口;
-e 环境配置;
--name 为容器指定一个名字;
--dns 8.8.8.8 指定容器使用的DNS,默认和宿主机一致;
--expose=端口号 开放一个或一组端口;
--restart=always 设置docker启动后,该容器自启。
-v 卷挂载,即volume,将本地目录挂载到容器目录,格式为,主机目录:容器目录 ;
说明:
1、目录的路径必须是绝对路径,如果目录不存在,Docker会自动创建。
2、Docker挂载数据卷的默认权限是读写(rw,用户也可以 通过ro指定为只读;加了ro之后,容器内对所挂载数据卷内的数据就无法修改了。
范例:
[root@Study ~]# docker run -d -p 3306:3306 -v /opt/mysql/data:/var/lib/mysql:ro -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
```
#### 2.2 具名挂载
```
1. 语法:
docker run -v 卷名:容器内路径 IMAGE:TAG
2. 数据卷存放路径:
/var/lib/docker/volumes/卷名/_data
3. 范例:
[root@Study ~]# docker run -d -p 5566:80 -v nginx:/etc/nginx --name Nginx01 nginx:1.9.6
说明:容器内/etc/nginx目录挂载的卷名为nginx,实际目录在/var/lib/docker/vo lumes/nginx/_data
4. 查看所有数据卷
[root@Study ~]# docker volume ls
[root@Study ~]# docker volume ls
DRIVER VOLUME NAME
local mysql
local tomcat
5. 查看指定数据卷的详细信息
[root@Study ~]# docker volume inspect 卷名
[root@Study ~]# docker volume inspect nginx
[
{
"CreatedAt": "2021-03-29T21:59:27+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginx/_data",
"Name": "nginx",
"Options": null,
"Scope": "local"
}
]
```
#### 2.3 匿名挂载
```
1. 语法:
docker run -v 容器内路径 IMAGE:TAG
2. 数据卷存放路径:
/var/lib/docker/volumes/xxxx/_data
3. 范例:
[root@Study ~]# docker run -d -p 5566:80 -v /etc/nginx --name Nginx02 nginx:1.9.6
4. 匿名挂载后,快速找到数据库
[root@Study ~]# docker inspect 容器ID
如下所示:
"Mounts": [
{
"Type": "volume",
"Name": "0d88b56cecf499e946af3fcff5cd1f62581c80775a1fc37addfc3794 f651d879",
"Source": "/var/lib/docker/volumes/0d88b56cecf499e946af3fcff5cd1f62 581c80775a1fc37addfc3794f651d879/_data",
"Destination": "/usr/local/tomcat",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
```
### 3、实战:Mysql同步数据
```
1. 下载Mysql:5.7镜像
[root@Study ~]# docker pull mysql:5.7
2. 运行MySQL容器
[root@Study ~]# docker run -d -p 3306:3306 -v /opt/mysql/conf:/etc/mysql/conf.d -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
或:
[root@Study ~]# docker run -d -v /home/mysql/data:/var/lib/mysql --restart always --network host --privileged=true --name mysql -e MYSQL_ROOT_PASSWORD=root123 mysql:5.7.29
说明:
-d 后台运行;
-p 3306:3306,即将本地3306端口映射到容器3306端口;
-v /opt/mysql/conf:/etc/mysql/conf.d,即将本地/opt/mysql/conf目录映射到容 器的etc/mysql/conf.d
-v /opt/mysql/data:/var/lib/mysql,即将本地的-v /opt/mysql/data映射到容器的/var/lib/mysql
-e MYSQL_ROOT_PASSWD=123456,即配置mysql的root密码;
--name mysql,即指定容器名为mysql;
3. 进入容器并登录mysql
[root@Docker ~]# docker exec -it 809241ed71dd /bin/bash
root@809241ed71dd:/# mysql -uroot -p123456
```
## 三、数据卷容器
```
当需要在多个容器之间共享一些持续更新的数据时,最简单的方法就是使用数据卷容器。数据卷容器也是一个容器,但他的目的是专门提供数据卷给其他容器挂载的。
1. 语法:
--volumes-from 数据卷容器名
2. 范例:
1、首先,创建一个数据卷容器CentOS01,并创建一个数据卷挂载到/data上。
[root@Study ~]# docker run -it -v /data:/data --name CentOS01 centos:7.6.1810 /bin/bash
2、接着,创建CentOS02容器,并从CentOS01上挂载数据卷/data。
[root@Study ~]# docker run -it --volumes-from CentOS01 --name CentOS02 centos:7.6.1810 /bin/bash
3、最后,创建CentOS03容器,并从CentOS01上挂载数据卷/data。
[root@Study ~]# docker run -it --volumes-from CentOS01 --name CentOS03 centos:7.6.1810 /bin/bash
总结:在三个容器CentOS01、CentOS02、CentOS03中都有/data目录,在任意一个添加或者删除数据,其他两各都会同步。
```
## 四、说明
```
如果将容器的日志目录等挂载到本机/log(/log单独挂载了磁盘),那么该容器的日志只会占用/log分区的磁盘空间,而不会占用/var/lib/docker/所在分区的磁盘空间。
```
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
NineData 社区版正式上线,提供永久免费本地化数据管理方案
NineData
114次阅读
2025-03-11 10:12:43
东方通TongHttpServer的安全特性解析
严少安
73次阅读
2025-03-17 23:15:48
NineData 社区版征文评测活动圆满收官!
NineData
65次阅读
2025-04-09 11:01:15
Apache Iceberg 解析,一文了解Iceberg定义、应用及未来发展
镜舟科技
43次阅读
2025-03-26 22:25:28
下一代DBA必备技能
Bytebase
37次阅读
2025-03-28 14:59:40
如何使用 RisingWave 和 PuppyGraph 构建高性能实时图分析框架
RisingWave中文开源社区
37次阅读
2025-03-18 10:49:54
一键部署 GPU Kind 集群,体验 vLLM 极速推理
Se7en的架构笔记
34次阅读
2025-03-24 09:41:41
腾讯云与MongoDB战略合作升级,瞄准AI时代的数据管理服务
腾讯云数据库
32次阅读
2025-03-21 10:34:16
AI大行其道,BI何去何从?德昂探索数据管理新篇章
德昂信息
32次阅读
2025-03-14 09:49:33
docker安装jenkins
IT那活儿
22次阅读
2025-03-31 10:00:41