容器与外界互联互通

193 阅读3分钟

容器与外界互联互通

容器与外界一次性文件互通

docker cp

用法类似Linux的“cp”“scp”,指定源路径(src path)和目标路径(dest path)就可以了

将数据从外界拷贝到容器内

image.png

docker cp a.txt e4e:/tmp

将当前目录下的a.txt,拷贝到容器ID为e4e的/tmp路径下

查看验证

image.png

将数据从容器内拷贝到外界

docker cp e4e:/tmp/a.txt ./b.txt

image.png

容器与主机共享文件

类似于“共享目录”的功能

docker run -v

docker run 命令启动容器的时候使用 -v 参数就行,具体的格式是“宿主机路径: 容器内路径

docker run -d --rm -v /tmp:/tmp redis:5-alpine

image.png -v 可以加上:ro,可以防止容器意外修改文件,例如-v /tmp:/tmp:ro

应用场景

多个不同版本的Python使用

  1. 先使用 docker pull 拉取一个 Python 3 的镜像,因为它打包了完整的运行环境,运行时有隔离,所以不会对现有系统的 Python 2.7 产生任何影响。
  2. 在本地的某个目录编写 Python 代码,然后用 -v 参数让容器共享这个目录。
  3. 现在就可以在容器里以 Python 3 来安装各种包,再运行脚本做开发了
docker pull python:alpine
docker run -it --rm -v `pwd`:/tmp python:alpine sh

网络互通

Docker的三种网络模式

分别是 null、host 和 bridge

null

最简单的模式,也就是没有网络,但允许其他的网络插件来自定义网络连接

host

直接使用宿主机网络,相当于去掉了容器的网络隔离(其他隔离依然保留),所有的容器会共享宿主机的 IP 地址和网卡
优点
没有中间层,通信效率高
缺点
缺少隔离,运行太多容器容易导致端口冲突
host 模式需要在 docker run 时使用 --net=host 参数,下面我就用这个参数启动 Nginx:

docker run -d --rm --net=host nginx:alpine

image.png

image.png

bridge

桥接模式,它有点类似现实世界里的交换机、路由器,只不过是由软件虚拟出来的,容器和宿主机再通过虚拟网卡接入这个网桥

image.png 运行时可以指定--net=bridge启用桥接模式,也可以不写,因为默认就是桥接模式

docker run -d --rm nginx:alpine # 默认使用桥接模式

image.png

分配服务端口号

端口号映射需要使用 bridge 模式,并且在 docker run 启动容器时使用 -p 参数,形式和共享目录的 -v 参数很类似,用 : 分隔本机端口和容器端口

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

image.png 本机的2个不同端口,分别映射到两个nginx容器的80端口。

总结

  1. docker cp 命令可以在容器和主机之间互相拷贝文件,适合简单的数据交换。
  2. docker run -v 命令可以让容器和主机共享本地目录,免去了拷贝操作,提升工作效率。
  3. host 网络模式让容器与主机共享网络栈,效率高但容易导致端口冲突。
  4. bridge 网络模式实现了一个虚拟网桥,容器和主机都在一个私有网段内互联互通。
  5. docker run -p 命令可以把主机的端口号映射到容器的内部端口号,解决了潜在的端口冲突问题。

《极客时间-Kubernetes入门实战课》学习笔记 Day7 774a0d4e91146e72b83719c671f4b6d.jpg