Docker如何与外界互通(chrono《kubernetes入门实战课》笔记整理)

Docker与外界互通的三种方式

1、拷贝文件

docker cp命令,可以直接在主机和容器之间互相拷贝(容器间不可以),格式和cp是一样的,就是注意要标明容器ID,例如:docker cp a.txt 062:/tmp

2、共享目录

在宿主机上需要共享的目录,挂载到虚拟机上,这样就可以实现虚拟机和宿主机的互通。具体方式为在docker run的时候,就加上-v,命令为:docker run -d --rm -v /tmp:/tmp redis,即把宿主机的/tmp目录挂载在容器里,这样容器里对/tmp的操作,对宿主机也是生效的,同时也是共享了宿主机的/tmp。如果有频繁操作宿主机文件的需求,可以用这个方式

3、网络互通

docker提供了三种网络模式,分别是null、host、bridge。

null:最简单的模式,没有网络,但允许其他的网络插件来定义网络连接;

host:直接使用宿主机网络,所有容器会共享宿主机的IP地址和网卡。优点是没有中间层,通信效率高,缺点是,缺少隔离,运行太多的容器时,容易有端口冲突。使用方式为,docker run 的时候添加--net=host,例如:docker run -d --rm --net=host nginx:alpine;

bridge:桥接模式,实际上是通过软件虚拟出来一个类似交换机的网桥docker 0,之后容器和宿主机通过虚拟网卡接入这个网桥,相比host,通信效率会低一些。可以run的时候--net=bridge,但其实不加也没有关系,因为默认就是这个网络模式。在宿主机上可以直接通过docker inspect xx | grep IPAddress来查看容器IP,是一个172.17.0.x的IP地址;

宿主机的docker 0 :

 

 

 

如何分配服务端口号

加入一个“中间层”,由容器环境例如Docker来统一管理分配端口号,在本机端口和容器端口之间做一个“映射”,容器内部还是自己的端口号,但是外部看起来是另一个端口号,这样就可以避免冲突了。端口号映射需要使用bridge模式,docker run的时候,使用-p参数,形式和-v类似,用冒号分隔。如下就是将本机的80和8080,分别映射到了两个容器的80端口:

  • docker run -d -p 80:80 --rm nginx:alpine
  • docker run -d -p 8080:80 --rm nginx:alpine

使用docker ps可以直观看到port这里的映射关系:

 

posted @   1234roro  阅读(161)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示