docker-compose dev / live容器与不同的包

已经有一些同样的问题: 一个或两个 ,但形成我的理解答案只是部分涵盖了这个话题。

在我的情况下,我有4个容器: dbcachenginx web服务器和php-fpm 。 前三个是不感兴趣的。

我们来谈谈php-fpm。 我有一个Dockerfile ,在那里我定义(通过RUN apt-get... )生产需要的软件包列表,以及生产环境的一些iniconfiguration。

接下来,我想在生产就绪的php-fpm上添加一个开发层,这就是为什么我需要另一个Dockerfile ,在那里我安装了一些东西,比如我不想在生产环境中看到的xdebug 。 但是对于第二个Dockerfile我需要一个正确的FROM ,这就是为什么我需要首先构build一个生产php-fpm容器,如:

 docker build -t my-php-fpm:base 

到目前为止,我可以在我的第二个(dev) Dockerfile引用它,并在我的撰写中使用它。 但是,基本的映像不是docker-compose.yml的一部分,所以不要忘了每次修改它时,都要修改它,并且简单的docker-compose up -d --force-recreate已经不够了。 只有一个基本图像可能没问题,但是如果系统变得更复杂,并且会有4-5个或更多这样的基本图像,则可以容易地进入噩梦而不忘记(重新)构build所有基本图像,并且只有在这之后才能撰写。

在阅读和重新阅读文档后,我最终以这样的方式结束了:基本映像成为docker-compose.yml的一部分:

 my-php-fpm-base: build: context: ./php-fpm image: my-php-fpm:base container_name: my-php-fpm-base 

但是,然后开发和生产环境(以及任何其他的,如阶段或testing) 必须使用撰写和定义真实的php-fpm实例的覆盖function。

docker-compose.dev.yml

 my-php-fpm: build: context: ./php-fpm-dev container_name: my-php-fpm volumes: - ..:/var/www/my - ./php-fpm/php-ini-overrides.ini:/etc/php/7.1/fpm/conf.d/99-overrides.ini depends_on: - my-db - my-cache user: www-data 

docker-compose.live.yml

 my-php-fpm: image: php-fpm:base container_name: my-php-fpm volumes: - ..:/var/www/my depends_on: - my-db - my-cache user: www-data 

这按预期工作,但有一个缺点:两个容器my-php-fpm-basemy-php-fpm正在运行。 当然,我可以停止基础容器,但又是一些额外的工作。

有没有什么好的解决办法,就像指导撰写不启动特定的服务,而只是build立图像?

或者我正在彻底地走向错误的方向?