Docker网络(Docker Network)是Docker容器之间和容器与主机之间通信的基础架构。它允许你创建和管理容器之间的通信通道,以及容器与主机之间的通信。Docker提供了不同类型的网络,以满足各种应用场景的需求。
一、常见的Docker网络概念和命令:
1. **默认网络**:当你安装Docker时,它会自动创建一个默认网络,通常命名为`bridge`。容器默认会连接到这个网络,允许它们互相通信。
2. **自定义网络**:你可以创建自定义网络以便更好地控制容器之间的通信。使用`docker network create`命令创建自定义网络,例如:
```
docker network create mynetwork
```
3. **连接容器到网络**:使用`docker network connect`命令将容器连接到网络,例如:
```
docker network connect mynetwork container_name
```
4. **查看网络信息**:使用`docker network ls`命令列出可用的Docker网络,以及`docker network inspect`命令查看特定网络的详细信息。
```
docker network ls
docker network inspect mynetwork
```
5. **删除网络**:使用`docker network rm`命令删除不再需要的网络。
```
docker network rm mynetwork
```
6. **连接到主机网络**:有时候,你可能需要让容器直接连接到主机网络,以便与主机上的服务通信。可以使用`--network host`选项启动容器,使其共享主机网络。
```
docker run --network host my_container
```
7. **多网络模式**:容器可以连接到多个网络,这在一些复杂的应用场景中非常有用。你可以使用`docker network connect`命令为容器添加额外的网络连接。
这些是Docker网络的基本概念和命令。通过使用Docker网络,你可以更好地控制容器之间的通信,以满足应用程序的要求。不同类型的网络适用于不同的使用情景,可以根据需要进行选择和配置。
二、网络机制
docker在启动时,会产生三种网络机制:bridge、host、none。
1. bridge模式
该模式下docker中的容器不会产生一个公有IP,只有宿主机可以直接访问容器,此时对外部主机是不可见的。但容器可以通过宿主机的NAT规则访问外网。
创建了三个容器,没有指定network,因此使用了默认的network(即bridge)
通过docker inspect micro-1 micro-2 micro-3,可见如下:
2. host模式
该模式下可以让容器共享宿主机的网络,好处在于可以直接与外部主机进行通信,但此时容器也缺乏隔离性,同时在使用时,对于同一台宿主机而言,相同容器的配置(端口,ip等)会产生冲突。
3. none模式
禁用容器的IP地址,此时容器有很好的隔离性,一般用于产生一些特殊的认证等。
三、自定义网络
首先先来了解下docker中的IP地址分配规则:docker中分配IP地址是根据一开始创建的docker桥接网卡有关系的,在创建时会产生一个地址段,当新的容器启动时,会根据以有的地址进行自增分配(增量为1),当某一容器关闭时,会自动回收,等待下一次的分配。
三种驱动:
- Bridge(自带dns解析功能)
- overlay(用于跨主机网络,集群访问,应用层通信)
- macvlan(用于跨主机网络,集群访问,物理层通信)
1. 创建自定义网络
##创建自定义网络
[root@server1 ~]# docker network create -d bridge mynet1 ##-d 指定模式(默认桥接)
##查看自定义网络信息
[root@server1 ~]# docker inspect mynet1
##查看网络
[root@server1 ~]# docker network ls
##网络删除
docker network rm mynet1
##使用自定义网络
[root@server1 ~]# docker run -d --name micro_mynet1-1 --network=mynet1 micro
2. 自定义网段、网关
##创建自指定网断和网关
[root@server1 ~]# docker network create -d bridge --subnet 172.30.0.0/24 --gateway 172.30.0.1 mynet2
##查看当前网络
[root@server1 ~]# docker network ls
##使用自定义网络启动容器
[root@server1 ~]# docker run -d --name micro_mynet2 --network=mynet2 -p 8084:8080 micro
##指定固定IP进行网络容器开启
[root@server1 ~]# docker run -d --name micro_mynet2 --network=mynet2 --ip=172.30.0.30 -p 8085:8080 micro
【注】 在指定IP时,只能使用自定义的网络进行指定。
四、容器间网络通信
1.同一网段下容器间通信(可相互访问)
查看网关和IP
进入容器micro_mynet2,访问micro_mynet2-2
进入容器micro_mynet2-2,访问micro_mynet2
2.不同网段下容器通信(不能相互通信)
查看网关和IP
进入容器micro_mynet1-1,访问micro_mynet2(无返回结果)
3.双网卡实现不同网段通信
查看容器micro_mynet2的网关
连接网关mynet3到容器micro_mynet2上
进入容器micro_mynet2,访问micro_mynet3
进入容器micro_mynet3,访问micro_mynet2
参考资料: 如何创建Docker中的网络_docker network create-优快云博客