2016-04-28 35 views
2

我使用docker为开发和生产环境。合并Dockerfiles构建

目前,我有两个Dockerfile

dev.dockerfile

FROM image:latest 

[common code in dev and production, e.g. : RUN apt-get install php5] 

prod.dockerfile

FROM image:latest 

[common code in dev and production, e.g. : RUN apt-get install php5] 

[code only used in production, e.g. : RUN docker-php-ext-install opcache] 

我想是要合并的通用代码到一个文件common.dockerfile,然后能够建立我的开发或生产图像与运行只有一个docker命令。

你有什么想法如何实现这一目标?

回答

3

督促建设时设置的环境变量。除非设置变量,否则让prod RUN语句成为noop。

+0

这是一个很好的答案,完全可以完成这项工作。对此迟到的批准抱歉:) –

1

我建议从开发图像继承生产的图像,例如:

dev.dockerfile保持不变,并prod.dockerfile看起来像:

FROM <dev_image_name_and_tag> 

[code only used in production, e.g. : RUN docker-php-ext-install opcache] 
+0

我将不得不运行两个'docker build'命令,是不是?如果我可以做一些像'FROM common.dockerfile'这样的东西,然后'docker build'会生成两个图像,那将是非常好的。 –

+0

嗯,我不认为这是可能的。使用我的方法,您的图像也将更快地构建,因为常见的软件包将只在开发映像中安装一次。 – jazgot

+1

另请参阅https://github.com/docker/docker/issues/735。 – Rick