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这里的映射关系:
标签:tmp,容器,run,kubernetes,chrono,--,宿主机,Docker,docker From: https://www.cnblogs.com/1234roro/p/16848739.html