![](/img/trans.png)
[英]docker use common configuration in dockerfile and docker-compose.yml
[英]docker-compose.yml compact common configuration
下面有docker-compose.yml
文件,其中包含n個具有相同配置的容器( image
, volumes
等), 但 command
屬性除外 。 有沒有寫重復的地方嗎? 那么如果我必須更改某些配置,我可以在一個地方完成它,而不必更改所有出現的情況。
一種選擇是使用image
使用的變量,但這並不能解決我要向所有容器添加另一個volume
問題。
PS-不需要更改版本3。
version: '2'
services:
container1:
image: ${CONTAINER_IMAGE}
user: my_user
hostname: my_hostname
command: unique running command for container1
env_file:
- 'docker.env'
volumes:
- ./builds/image:/image
- ~/workspace/component1:/component1
- ~/workspace/component2:/component2
links:
- db:db
- elastic-docker:elastic-docker
- graphite:graphite-docker
- zookeeper:zookeeper
depends_on:
- rabbitmq
container2:
image: ${CONTAINER_IMAGE}
user: my_user
hostname: my_hostname
command: unique running command for container2
env_file:
- 'docker.env'
volumes:
- ./builds/image:/image
- ~/workspace/component1:/component1
- ~/workspace/component2:/component2
links:
- db:db
- elastic-docker:elastic-docker
- graphite:graphite-docker
- zookeeper:zookeeper
depends_on:
- rabbitmq
container3:
image: ${CONTAINER_IMAGE}
user: my_user
hostname: my_hostname
command: unique running command for container3
env_file:
- 'docker.env'
volumes:
- ./builds/image:/image
- ~/workspace/component1:/component1
- ~/workspace/component2:/component2
links:
- db:db
- elastic-docker:elastic-docker
- graphite:graphite-docker
- zookeeper:zookeeper
depends_on:
- rabbitmq
#and so on..
謝謝。
您可以使用extends
關鍵字重用第一個容器的配置
version: '2'
services:
c1:
image: alpine
command: echo 1
c2:
extends: c1
command: echo 2
或使用第二個文件作為模板
version: '2'
services:
template:
image: alpine
version: '2'
services:
c1:
extends:
file: template.yml
service: template
command: echo 1
但只有在絕對需要時才應使用不同的配置,因為如果沒有這樣的配置,則無法將其部署為服務,並可以通過docker service scale service=3
或docker-compose(v3)輕松擴展
deploy:
mode: replicated
replicas: 3
您可以使用環境變量。 否則,您真正需要的是模板引擎。 有許多可用的模板引擎。 我過去使用過的一種是confd
。 您可以在下面的鏈接上獲得快速入門指南
https://github.com/kelseyhightower/confd/blob/master/docs/quick-start-guide.md
這將允許您使用toml
配置文件循環並具有不同的卷映射和不同的容器計數。
您甚至可以使用基於BASH的循環和腳本來生成撰寫文件。 但是維護文件將變得越來越困難。
PS:您可能對以下鏈接感興趣:
https://theagileadmin.com/2015/11/12/templating-config-files-in-docker-containers/
http://steveadams.io/2016/08/18/Environment-Variable-Templates.html
http://tarunlalwani.com/post/simple-parameterized-config-files-docker/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.