Docker-Компоновать Несколько Сервисов В Цикле

  • Автор темы Galinaf
  • Обновлено
  • 22, Oct 2024
  • #1

Попытка оптимизировать определение нескольких сервисов с помощью

 
 version: '3'
services:

for i in 1,2,3:

s$i:

build: .

ports:

- "500$i:9000"

volumes:

- ../www$i:/var/www
 

Вот оригинальный, "тупой" вариант version: '3' services: s1: build: . ports: - "5001:9000" volumes: - ../www1:/var/www s2: build: . ports: - "5002:9000" volumes: - ../www2:/var/www s3: build: . ports: - "5003:9000" volumes: - ../www3:/var/www :

docker-compose.yml

Есть ли какой-нибудь итератор, позволяющий сжать это до одного блока, как показано ниже?

docker-compose.yml

#docker #docker-compose #yaml #shell-script #templating

Galinaf


Рег
16 May, 2007

Тем
74

Постов
217

Баллов
617
  • 25, Oct 2024
  • #2

Не в чистом Docker Compose. Если у вас есть механизм шаблонов простого текста, который вам нравится (Mustache, Jinja, m4, ...), вы можете попросить его сделать это за вас.

Вы отметили это как сценарий оболочки и Compose может использовать конфигурацию YAML на стандартном вводе., поэтому в принципе один из вариантов — написать сценарий оболочки, а затем передать его в

 
 version: '3.3'
services:

s1: &s

build: .

ports:

- published: 5001

target: 9000

volumes:

- source: ../www1

target: /var/www

s2:

<<: *s

ports:

- published: 5002

volumes:

- source: ../www2

s3:

<<: *s

ports:

- published: 5003

volumes:

- source: ../www3
 
:

volumes

(Обратите внимание, что YAML чувствителен к отступам, и сценарий смешивает отступы для самого сценария, YAML, встроенного в сценарий, и маркеров конца Heredoc; так что это будет работать для простого инструмента, но это не будет мой долгосрочный выбор.)

 

Buraavazill93


Рег
25 Oct, 2024

Тем
56

Постов
197

Баллов
487
  • 25, Oct 2024
  • #3

С использованием ports version 3.3 extensions and with the long variants for docker-compose & #!/bin/sh buildComposeYaml() { cat <<HEADER version: '3' services: HEADER for i in $(seq 3); do cat <<BLOCK s$i: build: ../www$i ports: - "500$i:9000" BLOCK done } buildComposeYaml | docker-compose -f- "$@" :

docker-compose

Не то чтобы более компактный, но родной :-)

В версии 3.4 были внесены дальнейшие улучшения, которые сделали docker-compose.yml более DRY.

Возможно, кто-то более опытный укажет на еще более важные события!

 

AlexE59


Рег
08 Apr, 2006

Тем
80

Постов
200

Баллов
600
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно