gpt4 book ai didi

docker - 我应该/如何避免 Docker 的重复部分组成多个相互依赖项目的文件

转载 作者:行者123 更新时间:2023-12-02 19:55:29 25 4
gpt4 key购买 nike

让我们以依赖于两个或多个 API 的移动应用程序为例。

这些项目中的每一个都在独立的 Git 存储库中。然后我们有 3 个存储库,允许我们并行开发每个存储库。

每个项目都有自己的依赖:

  • 例如,第一个 API 需要一个 SQL 数据库
  • 第二个 API,需要一个 NoSQL 数据库
  • 移动应用需要这两个 API

现在我想“dockerize”所有这些项目以简化开发环境并在开发人员和/或生产环境之间统一它。

目前在每个项目中我们都可以创建自定义 docker-compose.yml符合每个项目要求的文件。

例如在第一个 API 中

version: "3.7"

services:
first_api:
image: golang:1.13
working_dir:
- /src
depends_on:
- mysql
volumes:
- ".:/src"
command: go run main.go

mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_USER_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE_NAME}

adminer:
image: adminer
restart: always

第二个 API 将具有类似的 docker-compose.yml文件,而是使用 NoSQL DB。

然后在移动应用存储库中我们将有一个 docker-compose.yml包含大量重复代码(和完全相同的容器)的文件,因为它与其他两个 API 相互依赖,一些其他文件相同(例如 .env 文件,入口点脚本,如果需要...)。

数据库设置/播种也将在 2 个存储库上完成,这可能有点烦人。

docker-compose.yml文件看起来像这样:

version: "3.7"

services:
app:
build:
context: .
args:
- IP=${IP}
ports:
- 19000:19000
- 19001:19001
- 19002:19002
volumes:
- ".:/app"
depends_on:
- first-api
- second-api

first-api:
image: my-registry:5000/first-api
ports:
- 9009:3000
depends_on:
- mysql
volumes:
- ".env:/dist/.env"

mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_USER_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE_NAME}

adminer:
image: adminer
restart: always
ports:
- 9099:8080

second-api:
image: my-registry:5000/second-api
ports:
- 9010:3000
depends_on:
- mongo

mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASSWORD}

mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGO_ROOT_USERNAME}
ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGO_ROOT_PASSWORD}

事实上在这个决赛docker-compose在 API 的配置文件中,我们有 4 个容器定义与它们完全相同,我们还有一些环境变量在至少 2 个存储库中进行了复制和版本控制。

有时我们也可以有Dockerfile重复,根据具体情况,数据库设置或其他东西。

在这个 Docker 开发环境设置中,我是否遗漏了什么可以避免重复的东西?

是否有避免这种情况的最佳做法或建议?

拥有大量相互依赖的微服务架构的公司如何管理这些相互依赖?

最佳答案

关于docker - 我应该/如何避免 Docker 的重复部分组成多个相互依赖项目的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com