Если у вас есть служба myapp
и файл секретов secrets.yml
:
Создайте файл для создания сообщения:
version: '3.1'
services:
myapp:
build: .
secrets:
secrets_yaml
Предоставьте секрет с помощью этой команды:
docker secret create secrets_yaml secrets.yml
Разверните свой сервис с помощью этой команды:
docker deploy --compose-file docker-compose.yml myappstack
Теперь ваше приложение может получить доступ к секретному файлу по адресу /run/secrets/secrets_yaml
. Вы можете жестко указать этот путь в своем приложении или создать символическую ссылку.
Другой вопрос
Вероятно, это ответ на вопрос «как вы предоставляете свои секреты своему кластеру Docker Swarm».
Исходный вопрос «как управлять секретными значениями с помощью docker compose» подразумевает, что файл docker-compose содержит секретные значения. Это не так.
Есть другой вопрос: «Где вы храните канонический источник secrets.yml
файла». Все зависит от вас. Вы можете хранить его в своей голове, распечатать на листе бумаги, использовать менеджер паролей, использовать специальное приложение / базу данных секретов. Черт возьми, вы даже можете использовать репозиторий git, если он надежно защищен. Конечно, никогда не храните его внутри системы, которую вы защищаете :)
Я бы порекомендовал хранилище. Чтобы сохранить секрет:
# create a temporary secret file
cat secrets.yml | vault write secret/myappsecrets -
Чтобы получить секрет и поместить его в свой роя докеров:
vault read -field=value secret/myappsecrets | docker secret create secrets_yaml -
Конечно, вы можете использовать сам кластер докеров как единственный источник истины для ваших секретов, но если ваш кластер докеров сломается, вы потеряете свои секреты. Поэтому убедитесь, что у вас есть резервная копия в другом месте.
Вопрос, который никто не задавал
Третий вопрос (который никто не задавал) - как предоставить секреты машинам разработчиков. Это может потребоваться, когда есть внешняя служба, которую невозможно имитировать локально, или большая база данных, которую невозможно скопировать.
Опять же, докер тут ни при чем (пока). В нем нет списков управления доступом, в которых указывается, какие разработчики и к каким секретам имеют доступ. И у него нет никакого механизма аутентификации.
Идеальное решение выглядит так:
- Разработчик открывает какое-то веб-приложение.
- Аутентифицируется с использованием какого-либо механизма единого входа.
- Копирует длинный список
docker secret create
команд и выполняет их в терминале.
Нам еще предстоит увидеть, появится ли такое приложение.
person
Vanuan
schedule
10.02.2017
docker-compose
уже поддерживает секреты? Какаяdocker-compose
версия у вас установлена? - person fzgregor   schedule 09.02.2017$ docker-compose --version
возвращает:docker-compose version 1.11.0, build 6de1806
, так что да, он должен поддерживать секреты в соответствии с примечаниями к выпуску. - person Eric   schedule 09.02.2017