多个docker-compose项目之间通信与环境架构
在讲多个 docker-compose 项目之间通信之前,想要先说一说我从刚使用 Docker 到目前为止遇到的一些问题与想法。 在刚学习 Docker 的时候,我相信很多人都跟我一样有过这种想法:我们的代码运行环境、MySQL、Redis 等服务是放到一个容器里面呢,还是放到多个容器里面呢?经过一番学习知道,Docker 官方是推荐将这些环境放置到多个容器中的,至于为什么就不详细说了,可以自行百度学习一下。 容器通信 但是当放到多个容器中,又会出现一个问题,我的 API 服务该怎么访问 MySQL、Redis 呢?有三种办法可以解决。 通过容器内 ip + 映射出的端口进行访问(不推荐) 通过 --link 链接另一个容器访问(不推荐) --link 只能在 docker run 一个容器时链接另一个已运行的容器,所以说该方法只能单向访问。 通过 network 将两个容器链接到同一个 network 中可以进行双向访问 docker-compose 这么看来第三种方式是最好的解决方案,但是当我们容器越来越多时,需要记住所有容器的 run 指令,将一个个的容器 run 起来,然后链接到同一个 network 中去,操作起来非常的麻烦。所以我更推荐使用 docker-compose 来编排管理多个容器。下面来编写一个 docker-compose.yml 文件演示一下。 编写接口 因为我们只是来演示一下容器之间的通信,使用 MySQL、Nginx 等容器反而更加的麻烦,所以我们使用 Golang 简单写一个接口用来构建一个演示的镜像。 package main import ( "flag" "github.com/gin-gonic/gin" ) func main() { name := flag.String("name", "", "") flag.Parse() r := gin.Default() r....