Docker 网络
本文最后更新于:2024年3月18日 凌晨
Docker 网络
- docker网络实现原理是通过
veth-pair实现的,veth-pair是一对的虚拟设备接口,总是成对出现的,一段连接协议,另一段彼此相连,充当连接各种虚拟网络设备的桥梁。 - 所有的容器不指定网络的情况下,都是
docker0路由的,docker会给我们的容器分配一个默认的可用IP - Docker中的所有的网络接口都是虚拟的。
port
- 快捷地查看端口的绑定情况。
1 | |
实例
1 | |
docker虚拟网络管理
network ls
- 可以查看所有创建的网络情况。
1 | |
network inspect
- 查看docker网络的详细信息。
1 | |
实例
1 | |
network create
- 新建自定义docker虚拟网络。
- 当多个容器加入同一个docker虚拟网络后,可以通过容器名替代ip访问其他容器。
1 | |
- -d:指定 Docker 网络类型,有 bridge,overlay等,其中 overlay 网络类型用于 Swarm mode
- –subnet:指定子网(192.168.0.0/16)
- –gateway:指定网关。
network rm
- 移除docker虚拟网络。
1 | |
容器连接网络
- Docker容器运行的时候有
host,bridge,none三种网络可供配置。- 默认是
bridge,即桥接网络,以桥接模式连接到宿主机。 host是宿主网络,即与宿主机共用网络。none则表示无网络,容器将无法联网。
- 默认是
birdge
- 使用
host.docker.internal这个特殊的DNS名称来解析宿主机IP - 使用容器名解析其他容器的IP,在 Docker Compose 中也可以使用服务名解析其他容器的IP
1 | |
- -P:是容器内部端口随机映射到主机的高端口。
- -p:是容器内部端口绑定到指定的主机端口。
- 另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1
1 | |
- 这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。
- 上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
host
- 当容器使用
host网络时,容器与宿主共用网络。 - 使用host网络可以使用
localhost访问宿主机,因而通用性比上一种方法好。 - 但是,由于
host网络没有bridge网络的隔离性好,使用host网络安全性不如bridge高。
1 | |
- 上面的命令中,没有必要像前面一样使用
-p来映射端口,是因为本身与宿主机共用了网络,容器中暴露端口等同于宿主机暴露端口。
连接自定义docker虚拟网络
1 | |
实例
- 运行一个容器并连接到新建的 test-net 网络:
1 | |
- 打开新的终端,再运行一个容器并加入到 test-net 网络:
1 | |
容器与网络连接与断开
network connect
- 将容器与docker虚拟网络连接。
- 单个容器可与多个docker虚拟网络连接。
1 | |
network disconnect
- 将容器与docker虚拟网络断开连接。
1 | |
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!