我可以使用Docker Compose配置文件来添加额外的环境变量,暴露更多端口,以及基于每个环境的额外Dockerfile RUN命令吗?

egdjgwm8  于 2023-06-29  发布在  Docker
关注(0)|答案(1)|浏览(124)

我有一个相当标准的Docker设置,运行php,mysql等。
这些服务在docker-compose.yml中定义,看起来像这样:

version: '3'
services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      API_KEY=[LIVE_API_KEY]
    volumes:
      - ./src:/var/www/html

# etc...

我想添加一些额外的东西 * 仅在我的开发环境中 ,例如:
1.添加额外的PHP扩展(xdebug)
1.暴露额外端口
1.额外的环境变量
有没有一种方法可以在同一个docker-compose.yml文件中的现有服务之上添加额外的配置
*,并将额外的RUN命令添加到我的Dockerfile中以安装更多的东西,但仅适用于我的开发环境,而无需创建完全独立的docker-compose.ymlDockerfile文件?
例如,我想做:

# docker-compose.yml
# Change or add some variables for dev only
environment:
  API_KEY=[DEV_API_KEY]
  XDEBUG_MODE=debug
# docker-compose.yml
# Expose some ports for dev only
ports:
  9003:9003
# Dockerfile
# Add some commands to Dockerfile for dev only
RUN pecl install xdebug

我很困惑我是否应该使用:Docker compose profiles 来完成这一点,或者 multi-stage builds,这些方法的组合,或者完全是另一种方法。

zlhcx6iw

zlhcx6iw1#

您可以使用多个合成文件。您所描述的是它们的一个非常典型的用途,其中主docker-compose.yml文件包含一组基本设置,而docker-compose.override.yml包含开发人员可能需要的设置。
例如,基本docker-compose.yml将包含您在生产中需要的设置,为所有映像提供名称并仅根据需要分配端口:

version: '3.8'
services:
  app: # an Nginx reverse proxy with static assets built in
    image: registry.example.com/phpproxy:${APP_TAG:-latest}
    ports:
      - "${APP_PORT:-80}:80"
  php:
    image: registry.example.com/phpapp:${PHP_TAG:-latest}
    environment:
      PGHOST: database
  database:
    image: postgres:15
    volumes:
      pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

docker-compose.override.yml文件将解释如何构建映像和打开更多端口:

version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.nginx
  php:
    build: .
    ports:
      - "9003:9003"
  database:
    ports:
      - "5432:5432"

如果第二个文件的名称正好是docker-compose.override.yml,那么Compose将自动找到它;如果你给予它另一个名字,那么你需要在每次调用docker-compose时提供所有的Compose文件名和docker-compose -f选项。
这种机制不允许您在不同的环境中构建不同的映像。(这通常不是最好的Docker实践。)我已经看到了一些使用多级Dockerfile和Compose build: { target: }设置来构建特定阶段的映像的方法。默认目标是最终构建阶段。

FROM php AS base
...

FROM base AS development
RUN pecl install xdebug

FROM base AS final
services:
  php:
    build:
      context: .
      target: development

Compose profiles只能用于启用和禁用服务,但不能更改其配置。

相关问题