docker 挂载三种方式 以及区别


volume: Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)

bind mounts:可以存储在宿主机系统的任意位置
tmpfs mounts:挂载存储在宿主机系统的内存中,不会写入宿主机的文件系统

 

 

voulume  指定docker  挂载区域

bind    是宿主机任意文件系统

tmpfs  是临时挂载 放在内存

 

volume  创建数据卷

创建volume数据卷:docker volume create for_nginx  

查看当前所有数据卷信息:docker volume ls
上面一大堆名字为很长字符的数据卷为匿名数据卷,是因为之前创建容器的时候没有手动创建数据卷进行了文件挂载,Docker就会自动创建匿名数据卷。
启动容器并指定数据卷:docker run -d -p 80:80 --mount type=volume , source=for_nginx,target=/usr/share/nginx/html nginx

可以查看下容器具体信息: docker inspect (容器id或者名称)

 

 

可以cd 到目录下 容器以及挂载到宿主机了

 

 

我们在宿主机数据卷里新增一个a . html
进入容器内部查看是否也增加了a.html文件:docker exec -it f7adebee03c2 /bin/bash

浏览器IP/a. html可以直接访间到页面,证明数据卷挂载成功
如果强制删除容器后,数据卷不会被删除,还是会保存在宿主机docker/volumes路径下

 

 

bing mounts  (绑定数据卷)

bind mounts可以将宿主机任意目录挂载到容器内
将宿主机/opt目录挂载到容器内:docker run -d -p 80:80 --mounttype=bind , source=/opt ,target=/usr/share/nginx/html nginx
进入容器查看nginx默认html页面:docker exec -it df4a184680be /bin/bash

 

 


发现并没有nginx默认的index.html和50.html页面,但浏览器可以正常显示Welcome tonginx!
注。如果你使用Bind mounts挂载宿主机目录到一个容器中的非空目录,那么此容器中的非空目录中的文件会被隐藏,容器访间这个目录时能够访间到的文件均来自于宿主机目录。

 

三种场景

 

volumes:
多个运行容器间共享数据
当Docker主机不确保具有给定的目录或文件
备份、恢复、或将数据从一个Docker主机迁移到另一个Docker主机时
bind mount:
主机与容器共享配置文件(Docker默认情况下通过这种方式为容器提供DNS解析,通过将/etc/resolv .conf挂载到容器中)
共享源代码或build artifacts(比如将Maven的target/目录挂载到容器中,每次在Docker主机中build Maven工程时,容器能够访间到那些rebuilt artifacts)
当docker主机中的文件或目录结构和容器需要的一致时
tmpfs mount:
既不想将数据存于主机,又不想存于容器中时(这可以是出于安全的考虑,或当应用需要写大量非持久性的状态数据时为了保护容器的性能)。

 

 

容器间通信方式   1  link 

不需要用ip直接用容器名(服务名)ping
docker exec -it tomcat02 ping tomcat01
I
上面的无法ping通!
docker run -d -p --name tomcat03 --link tomcat02 tomcatdocker exec -it tomcat03 ping tomcat02
此时就可以ping同通
原理:
docker exec -it tomcat83 cat /etc/hosts
总结:

--link就是在hosts配置中增加——个映射

 

docker  network ls  docker  默认  bridge  、host(共享网络)  还有自定义

 

 

用于2个容器互通 如果更多  需要加入桥接

 

docker run -itd  --name tomcat01 --net bridge tomcat

 

如下三个容器桥接的同一个网络

 

 

 

自建的docker 网络 默认就是桥接

docker network create mynet

 

 

 

 

来是三个测试一下

 

 

一般自定义网络  可以相互通信   

 

 

c1 联通b1 不同网络之间怎么联通  如下 

docker network connect mynet tomcat88

不同网络下的容器也能互相连通,tomcat00是其他网络下的容器

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM