¿Cómo puedo usar Docker-Compose para implementar en producción usando un env_file en el servidor?

¿Cómo puedo usar Docker-Compose para implementar en producción usando un env_file en el servidor?

Tomemos el siguiente ejemplo simplificado:

services:
  app:
    image: alpine
    env_file: config.env
    entrypoint:
      - /bin/sh
      - -c
      - 'echo "Var is: $$MY_VAR"'

Lo tengo config.envlocalmente con mi configuración de desarrollo local y config.enven el servidor con la configuración de producción.

Cuando uso , usa mi config.env local en lugar del del servidor. Prefiero no almacenar la configuración específica del entorno en mi repositorio; sin embargo, todos los métodos recomendados en la documentación de Docker implican crear archivos separados o archivos en la misma máquina en la que estás usando .docker-compose -H [email protected] up --build -d.yml.envdocker-compose

Entonces, mi pregunta es, ¿cómo puedo almacenar la configuración en mi servidor y usarla docker-composeen mi máquina de desarrollo para implementarla? ¿O es mejor simplemente cargar el repositorio en el servidor y ejecutarlo docker-composeallí para poder usar el archivo env remoto?

Respuesta1

Finalmente decidí crear mi propio script de implementación que copia los archivos de Docker-Compose en el servidor y usa un archivo de entorno en el servidor:

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;

información relacionada