docker---数据卷

数据卷(数据共享)

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

想要将容器中的数据持久化,可以将宿主机目录挂载到容器中。

一般只建议在创建容器时进行挂载,不建议启动容器后再挂载。因为启动容器后再挂载的话,需要修改配置文件,且不一定能挂载成功。

bash 复制代码
 docker run -v 数据卷              #在容器内创建数据卷
 ​
 docker run -v 宿主机目录:数据卷    #将宿主机目录挂载到容器中
 #注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
 #挂载后的目录默认可读可写
 
bash 复制代码
创建一个容器的挂载卷
docker run -itd --name test1 -v /opt/test1:/opt/test centos:7 /bin/bash

现在创建文件来查看数据是否同步

如何创建只读文件

bash 复制代码
docker run -itd --name test2 -v /opt/test2:/opt/test:ro centos:7 /bin/bash
cd /opt/test2
echo "zzz" > 123.txt
docker exec -it test2 bash
cd /opt/test
cat 123.txt
touch 456
//无法创建,只读
echo "123" > 123.txt
//无法创建,只读

容器和容器之间实现数据共享

test1 test2 可以有一个或者多个映射目录,实现数据互传,数据同步。

数据卷容器:只提供挂载点,在另一方收集数据。

bash 复制代码
cd /opt/test2
docker run -itd --name test11 -v /opt/data1 -v /opt/data2 centos:7 /bin/bash

data1  data2都是容器

docker exec -it test11 bash
cd /opt
ls
data1 data2

exit

docker run -itd --volumes-from test11 --name test12 centos:7 /bin/bash

docker exec -it test11 bash 
cd /opt/data1
echo 123 > 123
cd data2
echo 456 > 456

另一个终端
docker exec -it test12 bash
cd /opt
cd data1
cd data2
查看

容器间数据共享

容器互联(网络通信)

容器互联有老版本和新版本,老版本虽然已经被淘汰,但是为了作为区分在这里也演示一下

老版本

bash 复制代码
docker run -itd -P --name test111 centos:7 /bin/bash
docker ps



docker run -itd -P --name test222 --link test111:test222 centos:7 /bin/bash
docker ps
docker exec -it test111 bash
yum -y install net-tools
此时可以打开ifconfig

docker exec -it test222 bash
yum -y install net-tools


ping test222
bash 复制代码
vi /etc/hosts
查看
有映射才能ping通

新版本

用network指定-----自定义网络

bash 复制代码
docker -itd -P --name test112 --network=mynetwork centos:7 /bin/bash

docker -itd -P --name test113 --network=mynetwork centos:7 /bin/bash

docker exec -it test112 bash
yum -y install net-tools

docker exec -it test113 bash
yum -y install net-tools

用network模式不需要做映射

接下来有个相关项目

部署一个mysql的镜像,创建一个mysql的容器,用navicat可以直接访问容器的mysql,mysql端口的映射端口--》 33066--3306

创建一个数据卷。在宿主机可以看到容器内的mysql的日志文件

部署

bash 复制代码
首先拉取mysql镜像,注意,要拉取mysql:5.7.20的镜像
Docker pull mysql:5.7.20
不能是 docker pull mysql。因为最新的8.2.0版本有很多不兼容,实验无法成功。

报错演示↓

接下来运行,启动容器

bash 复制代码
docker run -itd -p 33066:3306 -v /opt/my_log:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7.20

-p 33066:3306   自定义指定端口

/opt/my_log:/var/lib/mysql   文件同步位置,前者为宿主机,后者为容器

 -e MYSQL_ROOT_PASSWORD=123456  指定密码

--name mysql mysql:5.7.20   指定镜像

接下来进入容器

docker exec -it mysql bash

然后开启日志

具体日志文件如图所示

去宿主机查看日志

也可以用navicat连接

实验完成

相关推荐
YH行业报告分析2 小时前
2026电缆铺设设备市场:自动化敷设与电网升级驱动增长
运维·自动化
Wang's Blog2 小时前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
ajassi20003 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎3 小时前
linux 进程信号(下)
linux·运维·服务器
Mikko73 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋3 小时前
Jenkins知识梳理(2)
运维·jenkins
yumgpkpm3 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
AIGC大时代3 小时前
LLM Agent 执行沙箱闸门:失败含义与当天最小实验
docker·沙箱·闸门·bubblewrap·llm agent
Liuqy-053 小时前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器
考研保研资料分享4 小时前
自动化控制保研经验合辑:上交夏令营、北工大预推免与跨专业面试复盘(2025)
运维·面试·自动化