数据卷(数据共享)
数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于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连接
实验完成