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连接

实验完成

相关推荐
java_logo20 分钟前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
码农学院38 分钟前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
大耳朵-小飞象10 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技10 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
生活爱好者!13 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
java_logo14 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
MC皮蛋侠客14 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
尽兴-15 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
Hui Baby15 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes
通信小小昕15 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu