前言
随着前端的发展,前端的工具链以及其在项目研发流程中的重要性越来越受到关注。Docker 是一种轻量级的虚拟化技术,可以提供为项目提供各种环境、服务等的容器化。在使用 Docker 时,有时我们需要让容器内的一个应用程序可以访问运行在另一个容器内的程序,这就需要一种方式来让容器之间实现局域网互相访问。
为什么需要在容器内部之间建立局域网?
在处理前端项目中,我们经常需要有一个运行的服务端来提供接口服务,也需要有一个静态资源服务器来提供前端的静态资源,对于这两者,我们可以分别启动两个Docker 容器,但是我们可能不希望他们暴露在网上,也不希望他们暴露在同一个容器中,因为一个容器只应该单一职责。那么怎么让两个容器可以相互访问呢?这就需要使用局域网进行配置。
容器内部的网络
在 Docker 中,每个容器是一个独立的网络命名空间,不同的容器内部使用不同的网络地址,如果需要使容器可以互相访问,就需要在它们的网络命名空间之间建立 “bridge” 网络。这个网络称之为 Docker0,就是 Docker 的基础网络。
控制容器间 IP 地址的分配
首先,我们需要明确在一个容器中,可以同时存在多个网络接口,每个网络接口可以拥有一个 IP 地址,但是了解了 Docker 容器的内部网络模型之后我们再来看,在 Docker0 中,每个容器都被分配了一个唯一的 IP 地址,该地址与其他容器的 IP 地址相隔离。
容器网络分为三个范围:
- 在 Docker0 网络中分配唯一的 IP 地址
- 容器内部 IP 地址的分配
- 容器与具有其他容器或外部世界的通信
解决容器内部局域网的办法
下面介绍两种实现容器内部互相访问的方式。
1.通过 Docker Compose
Docker Compose 是 Docker 官方提供的一个用来管理多个 Docker 容器的工具,简化 Docker 容器的启动模板定义、容器编排、编排管理等问题。在使用这种方法时,需要先定义 Docker Compose 文件。
-- -------------------- ---- ------- -------- --- --------- ------- ------ - --------------- --------- ------ - ----------- --------- - ---------- ------- ------ - --------------- --------- ----------- - ------ ------ - ----------- --------- - ---------- --------- -----------
在该文件中定义了两个服务—— server 和 client。我们需要在该文件中声明我们的网络,如 my_network
,然后将我们的两个容器连接到该网络上,这样两个容器就可以互相访问了。
2.通过自定义 Docker 网络
第二种方法需要创建一个自定义的 Docker 网络。而对于一个已经运行的容器,我们就需要将其分配到这个网络中来。
docker network create my_network docker run --name my_server --net my_network my_image docker run --name my_client --net my_network my_image
总结
在使用 Docker 进行开发或项目部署时,需要将多个容器连接起来,在容器内部使用网络进行通信。Docker 提供了 Docker Compose 工具和自定义 Docker 网络两种方法来实现。其中, Docker Compose 工具简化了 Docker 容器的启动模板定义、容器编排、编排管理等问题,这使得我们在多个容器之间进行网络通信变得更加方便。同时,自定义的 Docker 网络也被广泛使用,可以灵活地配置容器的网络通信。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c9ff345ad90b6d0418eff3