docker 数据卷与互联

ZYC·2024-01-25 00:01·10 次阅读

docker 数据卷与互联

docker 数据卷与互联

数据卷创建(宿主机目录或文件挂载到容器中)#

因为容器的数据是临时的,一旦容器被删除,数据将永久丢失。想要将容器中的数据持久化,可以将宿主机目录挂载到容器中

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

宿主机的目录可以同时挂载到多个容器中,可以实现基于宿主机将容器之间的数据进行共享!!

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

格式:#

复制代码
docker run -d -v 宿主机目录:数据卷  镜像名称:标签   #将宿主机目录挂载到容器中
 #注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
 #挂载后的目录默认可读可写
 ##如果想要修改为只读,那么为
docker run -d -v 宿主机目录:数据卷:ro  镜像名称:标签


也可以直接创建单独的数据卷,不挂载
 docker run -v 数据卷              #在容器内创建数据卷

                           
复制代码

 

 

 #可以试下内容其与宿主之间的文件共享

 

 

 

#宿主机的目录可以同时挂载到多个容器中,可以实现基于宿主机将容器之间的数据进行共享!!

 #验证容器之间是否进行共享,在data目录下再创个文件,看几个挂载容器的目录中是否有

 #宿主机挂载到容器目录中,并设置为只读

 

数据卷容器#

创建数据卷的时候 将宿主机的目录挂载到了数据卷中,然后再将新的容器将test01容器的数据卷挂载到新创建的容器中

这样既可以实现数据的持久化,同时性能比较高,因为容器之间的通信比较块

复制代码

docker run -itd --name cc01 -v /data -v /mnt nginx:test01
##在cc01容器中创建两个数据卷

docker exec -it test01 sh
##进入容器完成测试文件编写

#使用--volumes-from 来挂载cc01容器中的数据卷到新的容器cc02和cc03中
[root@localhost data]#docker run -d --name cc02 --volumes-from cc01 nginx:test01

[root@localhost data]#docker run -d --name cc03 --volumes-from cc01 nginx:test01






#创建数据卷容器test01。创建/usr/share/nginx/html数据卷。 docker run -d --name test01 -v /data/:/usr/share/nginx/html:ro nginx:test01 #使用--volumes-from 来挂载test01容器中的数据卷到新的容器test03和test04中 docker run -d --name test03 -p 9998:80 --volumes-from test01 nginx:test01 docker run -d --name test04 -p 9997:80 --volumes-from test01 soscscs/myapp:v1 ##可以进去查看目录 docker exec -it test03 sh cd /usr/share/nginx/html ls 完成验证 ##因为做了端口映射 或者使用curl 访问ip
复制代码

 

 

容器互联(可以通过容器名称或连接别名通信)#

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之问建立一条隧道,接收容器可以看到源容器指定的信息

 

复制代码
#创建并运行源容器取名test01
docker run -d --name test01 nginx:test01
 #创建并运行接收容器取名test02,使用--link选项指定连接容器test01以实现容器互联。
 
 docker run -itd --name test02 --link test01:aa centos:7 /bin/bash
 ##--link 容器名:连接的别名
 ​
 #进test02容器,ping test01,通过容器名称或者别名都可以通信
 docker exec -it test02 bash
ping test01
ping aa 
 #可以看到c1容器的IP地址
 ​
#创建容器test03,没有与test01做互联
docker run -d --name test03 nginx:test01
 docker exec -it test03 bash      #进入容器c5
 #通过c1的容器名称和别名,都无法和c1通信
/ # ping test01
ping: bad address 'test01'
/ # ping aa
ping: bad address 'aa'
/ # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
 #只能通过IP进行通信
复制代码

 

 #先创建个l1

 #使用 --link 容器名称:连接别名

 #进入l2容器后,可以通过容器名称和连接别名通信

 

posted @   citywalk  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
目录