docker-compose dev / live容器与不同的包
已经有一些同样的问题: 一个或两个 ,但形成我的理解答案只是部分涵盖了这个话题。
在我的情况下,我有4个容器: db
, cache
, nginx
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-base
和my-php-fpm
正在运行。 当然,我可以停止基础容器,但又是一些额外的工作。
有没有什么好的解决办法,就像指导撰写不启动特定的服务,而只是build立图像?
或者我正在彻底地走向错误的方向?