# 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
。
下面来介绍一下各种网络模式,以及如何使用来解决问题的。