寻找使用Docker的Git环境的开发人员建议

ldfqzlk8  于 2023-09-29  发布在  Git
关注(0)|答案(1)|浏览(149)

我在我的一个项目中遇到了这个问题,想知道是否有人有解决方案。我们有几个应用程序存储在自己的gitlab存储库中。您可以在同一台本地计算机上同时运行它们,因为它们都侦听不同的端口。
我们将此环境进行了dockerized,以便更轻松地启动和使用映像。您需要对应用程序进行一些轻微的更改,因为我们必须指定docker容器名称,而不是使用localhost进行配置,以便在docker网络中使用dns解析。因此,每个应用程序都有一个小的更改(一个文件),以便作为Docker compose工作。
我们有一个专门用于存储docker-compose.yml和应用程序(作为子模块)的存储库。这个仓库看起来像这样:

  1. docker-compose.yml
  2. applications/
  3. submodule1
  4. submodule2
  5. ...

目前,这些子模块被配置为通过我上面提到的“小变化”指向特定的分支。问题是这些分支永远不能被合并,它们必须始终存在于存储库中,并不断地为传入的更改重新定基。这使得repo可以开箱即用
我很好奇是否有更好的方法来构建我的docker compose环境,而不会让这些分支永久存在于仓库中,或者是否有人遇到过这个问题并有任何其他建议。我想一个解决方案是不使用这些分支,并在子模块上进行本地配置更改......然而,当开发人员去推送时,我知道他们会忘记并最终将这些不必要的更改提交给原始存储库。

mfuanj7w

mfuanj7w1#

这些主机名在您部署到的每个环境中都是不同的。考虑一个潜在的部署场景,其中您将每个服务部署到单独的VM;则主机名将是那些VM的DNS名称。或者,考虑部署到Kubernetes;那么你需要service.namespace.svc.cluster.local
相应地,您真的不应该像这样将主机名签入源代码树。您将需要对每个环境中的每个服务进行这样的“一个小更改”,而不仅仅是“本地”与“作曲”
在大多数容器环境中,环境变量是一种方便的方法。在运行容器时,设置环境变量往往很容易,例如通过Compose environment:。通常可以在代码中为环境变量设置默认值。我发现将这些默认值设置为开发人员会使用的值是很有帮助的,并且假设每个“真实的”部署场景都将以不同的方式设置环境变量。
假设您有一个foo-service,它通常在端口12345上侦听HTTP。一个环境变量有它的位置。以Python为例:

  1. foo_service_url = os.environ.get('FOO_SERVICE_URL', 'http://localhost:12345')
  2. requests.get(foo_service_url + '/api/x')

现在,您可以作为开发人员在本地运行它,并获得localhost地址。但是如果你想在Compose中运行它,主机名会有所不同,你可以相应地设置URL

  1. version: '3.8'
  2. services:
  3. foo:
  4. build: ./foo
  5. bar:
  6. build: ./bar
  7. environment:
  8. FOO_SERVICE_URL: http://foo:12345
展开查看全部

相关问题