# Docker教程 - 4 Docker网络
先说我们现在遇到的问题:
我们现在有一个 Redis 容器,一个 SpringBoot 项目容器,在 SpringBoot 项目的代码中如何访问 Redis 容器中的服务呢?
在 SpringBoot 项目中肯定不能使用 localhost,因为 localhost 表示当前的容器。之前都是将容器的端口映射到宿主机上的,所以我们访问容器中的服务器,都是通过 宿主机IP+端口 的方式来访问容器中的服务。所以在 SpringBoot 项目的容器中也可以通过 宿主机IP + redis:6379端口 来访问到 Redis 容器中的服务。
如果宿主机的IP不固定,会发生变化呢?那么容器之间该如何通信呢?
这就需要 Docker 网络了,Docker 网络主要解决的就是容器间的通信问题。
在启动了 Docker 之后,使用 ifconfig 命令查看网络信息,可以看到一个 docker0 的网络:

这个 docker0 就是 Docker 创建的虚拟网桥,用于容器与宿主机、容器与容器之间的网络通信。
上面的 enp0s5 是一个网络接口,是宿主机的物理或虚拟网络接口;
lo:是一个回环接口,通常用于允许计算机与其自身进行网络通信。
# 4.1 网络模式
我们在使用虚拟机的时候,虚拟机会有不同的网络模式,例如桥接、共享等;和虚拟机有些类似,安装 Docker 以后,也会默认创建三种网络模式,可以通过 docker network ls 查看。
# 命令
docker network ls
2

默认会有 bridge 、host 、 none 三种模式。
网络操作有一些命令,这里先简单了解一下,可以通过帮助命令来查看有哪些命令:

可以看到 docker network 有 connect 、create、disconnect、inspect、ls、prune、rm 命令。
# 1 创建网络
我们可以创建自己的网络,命令如下:
# 命令
docker network create 网络名称
# 举个栗子:
docker network create doubi-network
2
3
4
5
创建未完成,可以查看到网络,默认也是 bridge 模式。

# 2 删除网络
删除也非常简单,命令如下:
# 命令
docker network rm 网络ID/名称
# 举个栗子:
docker network rm doubi-network
2
3
4
5
运行如下:

# 3 查看网络详细信息
可以通过如下命令查看网络的详细信息:
# 命令
docker network inspect 网络ID/名称
# 举个栗子:
docker network inspect bridge
2
3
4
5
查看名称为 bridge 的网络的详细信息:

上图可以看到 bridge 网络的网桥名称就是 docker0 。
下面来介绍一下各种网络模式,以及如何使用来解决问题的。
