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

实验完成

相关推荐
tuokuac6 小时前
docker中nginx配置报错解决
linux·运维·服务器
Joren的学习记录7 小时前
【Linux运维大神系列】docker详解(四)
linux·运维·docker
Elastic 中国社区官方博客8 小时前
让我们把这个 expense 工具从 n8n 迁移到 Elastic One Workflow
大数据·运维·elasticsearch·搜索引擎·ai·信息可视化·全文检索
( •̀∀•́ )9209 小时前
GitHub Actions SSH 部署密钥
运维·ssh·github
louqle9 小时前
docker基本知识及常用命令汇总
运维·docker·容器
学烹饪的小胡桃9 小时前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
叫致寒吧9 小时前
Docker
运维·docker·容器
杨浦老苏10 小时前
现代流媒体聚合播放器冬瓜TV MAX
docker·群晖·多媒体
白露与泡影10 小时前
使用systemd,把服务装进 Linux 心脏里~
linux·运维·python
l1t11 小时前
用docker安装oracle 19c
运维·数据库·docker·oracle·容器