docker—数据卷

数据卷(数据共享)

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

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

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

 docker run -v 数据卷              #在容器内创建数据卷
 ​
 docker run -v 宿主机目录:数据卷    #将宿主机目录挂载到容器中
 #注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
 #挂载后的目录默认可读可写
 

创建一个容器的挂载卷
docker run -itd --name test1 -v /opt/test1:/opt/test centos:7 /bin/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 可以有一个或者多个映射目录,实现数据互传,数据同步。

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

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
查看

容器间数据共享

容器互联(网络通信)

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

老版本

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

vi /etc/hosts
查看
有映射才能ping通

新版本

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

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的日志文件

部署

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

报错演示↓

接下来运行,启动容器

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

实验完成

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>