我有一个相当标准的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.yml
和Dockerfile
文件?
例如,我想做:
# 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,这些方法的组合,或者完全是另一种方法。
1条答案
按热度按时间zlhcx6iw1#
您可以使用多个合成文件。您所描述的是它们的一个非常典型的用途,其中主
docker-compose.yml
文件包含一组基本设置,而docker-compose.override.yml
包含开发人员可能需要的设置。例如,基本
docker-compose.yml
将包含您在生产中需要的设置,为所有映像提供名称并仅根据需要分配端口:docker-compose.override.yml
文件将解释如何构建映像和打开更多端口:如果第二个文件的名称正好是
docker-compose.override.yml
,那么Compose将自动找到它;如果你给予它另一个名字,那么你需要在每次调用docker-compose
时提供所有的Compose文件名和docker-compose -f
选项。这种机制不允许您在不同的环境中构建不同的映像。(这通常不是最好的Docker实践。)我已经看到了一些使用多级Dockerfile和Compose
build: { target: }
设置来构建特定阶段的映像的方法。默认目标是最终构建阶段。Compose profiles只能用于启用和禁用服务,但不能更改其配置。