基本介绍
Docker网络是Docker容器之间和容器与外部网络之间的通信和连接的一种机制。在Docker中,每个容器都可以有自己的网络栈,包括网络接口、IP地址和网络配置。Docker网络提供了一种灵活且可定制的方式,使得容器之间可以相互通信,并与主机或其他网络资源进行交互。
在docker中,重启后ip是会变的;docker默认采用bridge连接,启动容器的时候会按照顺序来获取对应ip地址,这就导致容器每次重启后ip都会发生变化。
也就是说容器间使用ip
地址来进行通信的话,一旦有容器重启,重启的容器将不再能被访问到。Docker
网络就能够解决这个问题。
Docker网络作用:容器之间的互联以及端口映射,容器IP变动的时候可以通过服务名直接网络通信而不受影响。
四种网络模式
网络模式 | 简介 |
Bridge(默认) | 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。 |
Host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 |
Container | 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。 |
None | 该模式关闭了容器的网络功能,与宿主机、与其他容器都不连通的. |
在使用docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式:
- bridge模式:使用 --net=bridge 指定,默认设置。
- host模式:使用 --net=host 指定。
- none模式:使用 --net=none 指定。
- container模式:使用 --net=container:NAME_or_ID 指定。
Bridge模式
Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
Container 模式
新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。在创建容器时通过参数--net container:已运行的容器名称|ID
或者--network container:已运行的容器名称|ID
指定。
Host 模式
直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。使用host 网络模式需要在创建容器时通过参数--net host
或者--network host
指定,使用了host网络模式就不需要使用-p指定端口号,通过-p设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。
Docker
安装完成时,一般会自动创建三个网络,查看命令:
docker network ls
NETWORK ID NAME DRIVER SCOPE 50527f813731 bridge bridge local d40bdb2f0342 host host local 7a7b8938f822 none null local
常用命令
命令 | 作用 |
docker network connect | 将容器连接到网络 |
docker network create | 创建网络 |
docker network disconnect | 断开容器与网络的连接 |
docker network inspect | 显示一个或多个网络上的详细信息 |
docker network ls | 列举所有网络 |
docker network prune | 删除所有未使用的网络 |
docker network rm | 删除一个或多个网络 |
1、创建网络 test-network
docker network create test-network
2、将php容器或其他容器加入到test-network网络
docker network connect test-network php
3、 查看网络
docker network ls
4、 断开和移除网络
移除网络之前需要断开所有连接到网络的容器:docker network disconnet test-network php
移除网络:docker network rm test-network
5、 查看网络内部信息
docker network inspect test-network