Возьмем следующий упрощенный пример:
services:
app:
image: alpine
env_file: config.env
entrypoint:
- /bin/sh
- -c
- 'echo "Var is: $$MY_VAR"'
У меня config.env
локально с моими локальными настройками разработки и config.env
на сервере с производственными настройками.
Когда я использую , он использует мой локальный config.env вместо того, что на сервере. Я бы предпочел не хранить конфигурацию, специфичную для среды, в своем репозитории, однако все методы, рекомендуемые в документации Docker, включают создание отдельных файлов или файлов на той же машине, на которой вы используете .docker-compose -H [email protected] up --build -d
.yml
.env
docker-compose
Итак, мой вопрос: как я могу сохранить конфигурацию на моем сервере и использовать ее docker-compose
на моей машине разработчика для развертывания? Или мне лучше просто загрузить репозиторий на сервер и запустить его docker-compose
там, чтобы я мог использовать удаленный файл env?
решение1
В конце концов я решил создать собственный скрипт развертывания, который копирует файлы docker-compose на сервер и использует файл среды на сервере:
scp docker-compose.yml $USER@$HOST:/tmp/
deploy_cmd="export \$(grep -v '#.*' \"$REMOTE_ENV_FILE\" | xargs)";
deploy_cmd="$deploy_cmd && docker stack deploy -c /tmp/docker-compose.yml my-project";
echo "Deploying to $USER@$HOST"
ssh -qA "$USER@$HOST" "$deploy_cmd" || return 1;