Wie kann ich Docker-Compose verwenden, um mithilfe einer Umgebungsdatei auf dem Server in die Produktion zu implementieren?

Wie kann ich Docker-Compose verwenden, um mithilfe einer Umgebungsdatei auf dem Server in die Produktion zu implementieren?

Nehmen wir das folgende vereinfachte Beispiel:

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

Ich habe es config.envlokal mit meinen lokalen Entwicklungseinstellungen und config.envauf dem Server mit Produktionseinstellungen.

Wenn ich verwende , wird meine lokale config.env anstelle der auf dem Server verwendet. Ich möchte umgebungsspezifische Konfigurationen lieber nicht in meinem Repository speichern, die in der Docker-Dokumentation empfohlenen Methoden erfordern jedoch alle das Erstellen separater Dateien oder Dateien auf demselben Computer, auf dem Sie verwenden .docker-compose -H [email protected] up --build -d.yml.envdocker-compose

Meine Frage ist also: Wie kann ich die Konfiguration auf meinem Server speichern und docker-composeauf meinem Entwicklungscomputer zum Bereitstellen verwenden? Oder ist es besser, wenn ich das Repository einfach auf den Server hochlade und docker-composedort ausführe, damit ich die Remote-Umgebungsdatei verwenden kann?

Antwort1

Ich habe mich schließlich dafür entschieden, mein eigenes Bereitstellungsskript zu erstellen, das die Docker-Compose-Dateien auf den Server kopiert und eine Umgebungsdatei auf dem Server verwendet:

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;

verwandte Informationen