# 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
1
2

默认会有 bridgehostnone 三种模式。


网络操作有一些命令,这里先简单了解一下,可以通过帮助命令来查看有哪些命令:

可以看到 docker network 有 connect 、create、disconnect、inspect、ls、prune、rm 命令。

# 1 创建网络

我们可以创建自己的网络,命令如下:

# 命令
docker network create 网络名称

# 举个栗子:
docker network create doubi-network
1
2
3
4
5

创建未完成,可以查看到网络,默认也是 bridge 模式。

# 2 删除网络

删除也非常简单,命令如下:

# 命令
docker network rm 网络ID/名称

# 举个栗子:
docker network rm doubi-network
1
2
3
4
5

运行如下:

# 3 查看网络详细信息

可以通过如下命令查看网络的详细信息:

# 命令
docker network inspect 网络ID/名称

# 举个栗子:
docker network inspect bridge
1
2
3
4
5

查看名称为 bridge 的网络的详细信息:

上图可以看到 bridge 网络的网桥名称就是 docker0


下面来介绍一下各种网络模式,以及如何使用来解决问题的。

内容未完......