【Docker】容器与外部系统之间沟通交流方式
如何拷贝容器内的数据
类似 Linux 的“cp”、“scp”,指定源路径(src path)和目标路径(dest path)
# 将 a.txt 拷贝到容器的 /tmp 目录
docker cp a.txt 964:/tmp
# 从容器拷贝出文件
docker cp 964:/tmp/a.txt ./a_copy.txt
如何共享主机上的文件
共享宿主机目录。
docker run 命令启动容器使用 -v 参数,具体的格式是“宿主机路径: 容器内路径”。
docker run -d --rm -v /tmp:/tmp redis
如何实现网络互通
Docker 提供了三种网络模式,分别是 null、host 和 bridge。
null
null 是最简单的模式,也就是没有网络,但允许其他的网络插件来自定义网络连接。
host
host 使用宿主机网络,相当于去掉了容器的网络隔离(其他隔离依然保
留),所有的容器会共享宿主机的 IP 地址和网卡。
这种模式没有中间层,自然通信效率高,但缺少了隔离,运行太多的容器也容易导致端口冲突。
使用:docker run 时加上 --net=host
docker run -d --rm --net=host nginx:alpine
bridge
桥接模式。
容器和宿主机再通过虚拟网卡接入这个网桥(图中的 docker0),那么它们之间也就可以正常的收发网络数据包了。和 host 模式相比,bridge 模式多了虚拟网桥和网卡,通信效率会低一些。
Docker 默认的网络模式就是 bridge,所以一般不需要显式指定。(--net=bridge)
如何分配服务端口号
端口号映射需要使用 bridge 模式,并且在 docker run 启动容器时使用 -p 参数,用 : 分隔本机端口和容器端口。
# 启动两个Nginx 容器,分别跑在 80 和 8080 端口上
docker run -d -p 80:80 --rm nginx:alpine
docker run -d -p 8080:80 --rm nginx:alpine