Verwendung der Dateien args :, environment :, env_file: und .env mit dem Befehl docker-compose

Verwendung der Dateien args :, environment :, env_file: und .env mit dem Befehl docker-compose

Ich habe mich wegen der Verwendung von "args:", "environment:", "environment:", "env_file:" und der ".env" -Datei in docker-compose v3 verlaufen, also habe ich es für mich selbst organisiert.

Zusammenfassung

Über args:

Über Umwelt:

Über env_file:

Über .env

Verwendung von Argumenten:

Erstens das offizielle Dokument.

https://docs.docker.com/compose/compose-file/#args

Add build arguments, which are environment variables accessible only during the build process.

Kostenlose Übersetzung: Sie können Variablen für den Build festlegen.

Ein Mechanismus, mit dem Sie Build-Variablen festlegen können.

ARG_VALUE1 - Deklarieren und setzen Sie die Werte wie folgt auf ARG_VALUE4 und überprüfen Sie das Verhalten.

Dockerfile docker-compose.yml
ARG_VALUE1 arg1_in_Dockerfile
ARG_VALUE2 arg2_in_Dockerfile arg2_in_yml
ARG_VALUE3 arg3_in_yml
ARG_VALUE4

./args/Dockerfile

./args/Dockerfile


FROM busybox

ARG ARG_VALUE1="arg1_in_Dockerfile."
ARG ARG_VALUE2="arg2_in_Dockerfile."

RUN echo "ARG_VALUE1 is ${ARG_VALUE1}" \
  && echo "ARG_VALUE2 is ${ARG_VALUE2}" \
  && echo "ARG_VALUE3 is ${ARG_VALUE3}" \
  && echo "ARG_VALUE4 is ${ARG_VALUE4}"
RUN echo "ARG_VALUE1 is $ARG_VALUE1" >> /tmp/outs.txt \
  && echo "ARG_VALUE2 is $ARG_VALUE2" >> /tmp/outs.txt \
  && echo "ARG_VALUE3 is $ARG_VALUE3" >> /tmp/outs.txt \
  && echo "ARG_VALUE4 is $ARG_VALUE4" >> /tmp/outs.txt

CMD cat /tmp/outs.txt \
  && echo "-----" \
  && echo "ARG_VALUE1 is ${ARG_VALUE1}" \
  && echo "ARG_VALUE2 is ${ARG_VALUE2}" \
  && echo "ARG_VALUE3 is ${ARG_VALUE3}" \
  && echo "ARG_VALUE4 is ${ARG_VALUE4}"

./args/docker-compose.yml

./args/docker-compose.yml


version: '3'
services:
  with-args:
    build:
      context: ./
      args:
        ARG_VALUE2: "arg2_in_yml"
        ARG_VALUE3: "arg3_in_yml"

Lauf.

% docker-compose build --no-cache && docker-compose up
...Abkürzung...
Step 4/6 : RUN echo "ARG_VALUE1 is ${ARG_VALUE1}"   && echo "ARG_VALUE2 is ${ARG_VALUE2}"   && echo "ARG_VALUE3 is ${ARG_VALUE3}"   && echo "ARG_VALUE4 is ${ARG_VALUE4}"
 ---> Running in 64893f52d5bc
ARG_VALUE1 is arg1_in_Dockerfile.
ARG_VALUE2 is arg2_in_yml
ARG_VALUE3 is
ARG_VALUE4 is
Removing intermediate container 64893f52d5bc
 ---> a66e7626d5eb
...Abkürzung...
[Warning] One or more build-args [ARG_VALUE3] were not consumed
...Abkürzung...
with-args_1  | ARG_VALUE1 is arg1_in_Dockerfile.
with-args_1  | ARG_VALUE2 is arg2_in_yml
with-args_1  | ARG_VALUE3 is
with-args_1  | ARG_VALUE4 is
with-args_1  | -----
with-args_1  | ARG_VALUE1 is
with-args_1  | ARG_VALUE2 is
with-args_1  | ARG_VALUE3 is
with-args_1  | ARG_VALUE4 is
args_with-args_1 exited with code 0

Ergebnis.

Dockerfile docker-compose.yml Zur Bauzeit Beim Ausführen
ARG_VALUE1 arg1_in_Dockerfile arg1_in_Dockerfile
ARG_VALUE2 arg2_in_Dockerfile arg2_in_yml arg2_in_yml
ARG_VALUE3 arg3_in_yml [Warning]
ARG_VALUE4

So verwenden Sie die Umgebung:

Erstens das offizielle Dokument.

https://docs.docker.com/compose/compose-file/#environment

Add environment variables.

Ein Mechanismus, mit dem Sie Umgebungsvariablen hinzufügen können.

Im Gegensatz zu der oben erwähnten "Build-Variablen" ist dies eine Anweisung zum Setzen der sogenannten "Umgebungsvariablen".

ENV_VALUE1 - Deklarieren und setzen Sie die Werte wie folgt auf ENV_VALUE4 und überprüfen Sie das Verhalten.

Dockerfile docker-compose.yml
ENV_VALUE1 env1_in_Dockerfile
ENV_VALUE2 env2_in_Dockerfile env2_in_yml
ENV_VALUE3 env3_in_yml
ENV_VALUE4

./environment/Dockerfile

./environment/Dockerfile*


FROM busybox

ENV ENV_VALUE1="env1_in_Dockerfile."
ENV ENV_VALUE2="env2_in_Dockerfile."

RUN echo "ENV_VALUE1 is ${ENV_VALUE1}" \
  && echo "ENV_VALUE2 is ${ENV_VALUE2}" \
  && echo "ENV_VALUE3 is ${ENV_VALUE3}" \
  && echo "ENV_VALUE4 is ${ENV_VALUE4}" \
RUN echo "ENV_VALUE1 is $ENV_VALUE1" >> /tmp/outs.txt \
  && echo "ENV_VALUE2 is $ENV_VALUE2" >> /tmp/outs.txt \
  && echo "ENV_VALUE3 is $ENV_VALUE3" >> /tmp/outs.txt \
  && echo "ENV_VALUE4 is $ENV_VALUE4" >> /tmp/outs.txt

CMD cat /tmp/outs.txt \
  && echo "-----" \
  && echo "ENV_VALUE1 is ${ENV_VALUE1}" \
  && echo "ENV_VALUE2 is ${ENV_VALUE2}" \
  && echo "ENV_VALUE3 is ${ENV_VALUE3}" \
  && echo "ENV_VALUE4 is ${ENV_VALUE4}"

./environment/docker-compose.yml

./environment/docker-compose.yml


version: '3'
services:
  with-environment:
    environment:
      ENV_VALUE2: "env2_in_yml"
      ENV_VALUE3: "env3_in_yml"

Lauf.

% docker-compose build --no-cache && docker-compose up
...Abkürzung...
Step 4/6 : RUN echo "ENV_VALUE1 is ${ENV_VALUE1}"   && echo "ENV_VALUE2 is ${ENV_VALUE2}"   && echo "ENV_VALUE3 is ${ENV_VALUE3}"   && echo "ENV_VALUE4 is ${ENV_VALUE4}"
 ---> Running in bb4ae383c1e7
ENV_VALUE1 is env1_in_Dockerfile.
ENV_VALUE2 is env2_in_Dockerfile.
ENV_VALUE3 is
ENV_VALUE4 is
Removing intermediate container bb4ae383c1e7
 ---> a01b51cd008a
...Abkürzung...
with-environment_1  | ENV_VALUE1 is env1_in_Dockerfile.
with-environment_1  | ENV_VALUE2 is env2_in_Dockerfile.
with-environment_1  | ENV_VALUE3 is
with-environment_1  | ENV_VALUE4 is
with-environment_1  | -----
with-environment_1  | ENV_VALUE1 is env1_in_Dockerfile.
with-environment_1  | ENV_VALUE2 is env2_in_yml
with-environment_1  | ENV_VALUE3 is env3_in_yml
with-environment_1  | ENV_VALUE4 is
environment_with-environment_1 exited with code 0

Ergebnis.

Dockerfile docker-compose.yml Zur Bauzeit Beim Ausführen
ENV_VALUE1 env1_in_Dockerfile env1_in_Dockerfile env1_in_Dockerfile
ENV_VALUE2 env2_in_Dockerfile env2_in_yml env2_in_Dockerfile env2_in_yml
ENV_VALUE3 env3_in_yml env3_in_yml
ENV_VALUE4

So verwenden Sie env_file:

Erstens das offizielle Dokument.

https://docs.docker.com/compose/compose-file/#env_file

Add environment variables from a file.

Ein Mechanismus zum Hinzufügen sogenannter Umgebungsvariablen aus einer "Datei".

ENV_VALUE1 - Deklarieren und setzen Sie die Werte wie folgt auf ENV_VALUE5 und überprüfen Sie das Verhalten.

Dockerfile docker-compose.yml some_env.env
ENV_VALUE1 env1_in_Dockerfile
ENV_VALUE2 env2_in_Dockerfile env2_in_yml
ENV_VALUE3 env3_in_yml env3_in_file
ENV_VALUE4 env4_in_file
ENV_VALUE5

./env_file/Dockerfile

./env_file/Dockerfile


FROM busybox

ENV ENV_VALUE1="env1_in_Dockerfile."
ENV ENV_VALUE2="env2_in_Dockerfile."

RUN echo "ENV_VALUE1 is ${ENV_VALUE1}" \
  && echo "ENV_VALUE2 is ${ENV_VALUE2}" \
  && echo "ENV_VALUE3 is ${ENV_VALUE3}" \
  && echo "ENV_VALUE4 is ${ENV_VALUE4}" \
  && echo "ENV_VALUE5 is ${ENV_VALUE5}"
RUN echo "ENV_VALUE1 is $ENV_VALUE1" >> /tmp/outs.txt \
  && echo "ENV_VALUE2 is $ENV_VALUE2" >> /tmp/outs.txt \
  && echo "ENV_VALUE3 is $ENV_VALUE3" >> /tmp/outs.txt \
  && echo "ENV_VALUE4 is $ENV_VALUE4" >> /tmp/outs.txt \
  && echo "ENV_VALUE5 is $ENV_VALUE5" >> /tmp/outs.txt

CMD cat /tmp/outs.txt \
  && echo "-----" \
  && echo "ENV_VALUE1 is ${ENV_VALUE1}" \
  && echo "ENV_VALUE2 is ${ENV_VALUE2}" \
  && echo "ENV_VALUE3 is ${ENV_VALUE3}" \
  && echo "ENV_VALUE4 is ${ENV_VALUE4}" \
  && echo "ENV_VALUE5 is ${ENV_VALUE5}"

./env_file/docker-compose.yml

./env_file/docker-compose.yml


version: '3'
services:
  with-env_file:
    build:
      context: ./
    environment:
      ENV_VALUE2: "env2_in_yml"
      ENV_VALUE3: "env3_in_yml"
    env_file:
      - some_env.env

./env_file/some_env.env

./env_file/some_env.env


ENV_VALUE3="env3_in_file"
ENV_VALUE4="env4_in_file"

Lauf.

% docker-compose build --no-cache && docker-compose up
...Abkürzung...
Step 4/6 : RUN echo "ENV_VALUE1 is ${ENV_VALUE1}"   && echo "ENV_VALUE2 is ${ENV_VALUE2}"   && echo "ENV_VALUE3 is ${ENV_VALUE3}"   && echo "ENV_VALUE4 is ${ENV_VALUE4}"   && echo "ENV_VALUE5 is ${ENV_VALUE5}"
 ---> Running in 5851a9b3aa91
ENV_VALUE1 is env1_in_Dockerfile.
ENV_VALUE2 is env2_in_Dockerfile.
ENV_VALUE3 is
ENV_VALUE4 is
ENV_VALUE5 is
Removing intermediate container 5851a9b3aa91
 ---> 39f56354d7cd
...Abkürzung...
with-env_file_1  | ENV_VALUE1 is env1_in_Dockerfile.
with-env_file_1  | ENV_VALUE2 is env2_in_Dockerfile.
with-env_file_1  | ENV_VALUE3 is
with-env_file_1  | ENV_VALUE4 is
with-env_file_1  | ENV_VALUE5 is
with-env_file_1  | -----
with-env_file_1  | ENV_VALUE1 is env1_in_Dockerfile.
with-env_file_1  | ENV_VALUE2 is env2_in_yml
with-env_file_1  | ENV_VALUE3 is env3_in_yml
with-env_file_1  | ENV_VALUE4 is env4_in_file
with-env_file_1  | ENV_VALUE5 is
env_file_with-env_file_1 exited with code 0

Ergebnis.

Dockerfile docker-compose.yml some_env.env Zur Bauzeit Beim Ausführen
ENV_VALUE1 env1_in_Dockerfile env1_in_Dockerfile env1_in_Dockerfile
ENV_VALUE2 env2_in_Dockerfile env2_in_yml env2_in_Dockerfile env2_in_yml
ENV_VALUE3 env3_in_yml env3_in_file env3_in_yml
ENV_VALUE4 env4_in_file env4_in_file
ENV_VALUE5

Verwendung der ENV-Datei

Die .env-Datei ist eine Datei, die speziell in Docker-Compose behandelt wird.

Wird in der Variablenersetzungsfunktion verwendet.

Variable Austauschfunktion

Die .env-Datei wird von der Variablenersetzungsfunktion von "Docker-Compose" verwendet. Versuchen Sie also zuerst die Variablenersetzungsfunktion.

Offizielle Dokumentation. https://docs.docker.com/compose/compose-file/#variable-substitution

Your configuration options can contain environment variables. Compose uses the variable values from the shell environment in which docker-compose is run.

Kostenlose Übersetzung: Sie können die Umgebungsvariable der Shell, die "Docker-Compose" ausführt, als Variable für Docker-Compose verwenden.

Bereiten Sie . / Variable-substitution / docker-compose.yml mit den folgenden Inhalten vor.

./variable-substitution/docker-compose.yml


version: '3'
services:
  variable-substitution:
    image: busybox:${BUSYBOX_VERSION}

Setzen Sie vorübergehend die Umgebungsvariable BUSYBOX_VERSION = latest und docker-compose up. (Da kein "Build" erforderlich ist, wird es direkt "aufgebaut".)

% env BUSYBOX_VERSION="latest" docker-compose up
...Abkürzung...
variable-substitution_variable-substitution_1 exited with code 0

Ich zog es sicher hoch und fertig.

Setzen Sie in ähnlicher Weise BUSYBOX_VERSION = musl auf die Umgebungsvariable und do docker-compose up.

% env BUSYBOX_VERSION="musl" docker-compose up
...Abkürzung...
variable-substitution_variable-substitution_1 exited with code 0

Dies wurde auch erfolgreich hochgezogen und beendet.

Überprüfen Sie zur Bestätigung die Bildliste mit "Docker-Bildern".

% docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             musl                8bce8d24824c        5 weeks ago         1.47MB
busybox             latest              f0b02e9d092d        5 weeks ago         1.23MB

Natürlich habe ich bestätigt, dass es ein Bild mit "neuesten", "musl" TAG gibt.

Auf diese Weise hat "Docker-Compose" einen Mechanismus, um die Umgebungsvariablen der Umgebung, in der die Shell ausgeführt wird, an "Docker-Compose" zu übergeben.

Dies ist eine der variablen Ersetzungsfunktionen.

.env Datei

Die offizielle Dokumentation sagt:

https://docs.docker.com/compose/compose-file/#variable-substitution

You can set default values for environment variables using a .env file, which Compose automatically looks for. Values set in the shell environment override those set in the .env file.

Kostenlose Übersetzung: docker-compose setzt die Standardumgebungsvariable, wenn die .env`-Datei gefunden wird. Außerdem werden die aus den Umgebungsvariablen der Shell festgelegten Werte mit den in der Datei ".env" festgelegten Werten überschrieben.

Bereiten Sie die Datei . / Variable-substitution-dotenv / .env wie unten gezeigt vor.

./variable-substitution-dotenv/.env


BUSYBOX_VERSION=latest

Gleicher Inhalt wie zuvor, aber bereiten Sie ". / Variable-substitution-dotenv / docker-compose.yml" vor.

./variable-substitution-dotenv/docker-compose.yml


version: '3'
services:
  variable-substitution-dotenv:
    image: busybox:${BUSYBOX_VERSION}

Versuchen Sie in diesem Zustand "up", ohne eine temporäre Umgebungsvariable festzulegen.

% docker-compose up
Creating network "variable-substitution-dotenv_default" with the default driver
Pulling variable-substitution-dotenv (busybox:latest)...
latest: Pulling from library/busybox
9758c28807f2: Pull complete
Digest: sha256:a9286defaba7b3a519d585ba0e37d0b2cbee74ebfe590960b0b1d6a5e97d1e1d
Status: Downloaded newer image for busybox:latest
Creating variable-substitution-dotenv_variable-substitution-dotenv_1 ... done
Attaching to variable-substitution-dotenv_variable-substitution-dotenv_1

Sie können sehen, dass "Neueste" erfolgreich aufgerufen wurde.

Schreiben Sie als Nächstes . / Variable-substitution-dotenv / .env in den folgenden Inhalt.

./variable-substitution-dotev/.env


BUSYBOX_VERSION=musl

Versuchen Sie in diesem Zustand erneut "Docker-Compose Up".

% docker-compose up
Pulling variable-substitution-dotenv (busybox:musl)...
musl: Pulling from library/busybox
7c3804618ebb: Pull complete
Digest: sha256:605de95bca536139f324abdecf88dcab492c8457346e7fc92e37dff6e263f341
Status: Downloaded newer image for busybox:musl
Recreating variable-substitution-dotenv_variable-substitution-dotenv_1 ... done
Attaching to variable-substitution-dotenv_variable-substitution-dotenv_1
variable-substitution-dotenv_variable-substitution-dotenv_1 exited with code 0

Sie können sehen, dass musl erfolgreich hochgezogen wurde.

Auf diese Weise ermöglicht die Verwendung der Datei ".env" die Übergabe von Variablen an "Docker-Compose", ohne die Umgebungsvariablen der Shell-Ausführungsumgebung zu verschmutzen.

Das offizielle Dokument enthält übrigens die folgenden Hinweise.

Note when using docker stack deploy The .env file feature only works when you use the docker-compose up command and does not work with docker stack deploy.

Freie Übersetzung

Hinweis: Für diejenigen, die "Docker Stack Deploy" verwenden Diese Funktion mit der Datei ".env" funktioniert nur mit dem Befehl "docker-compose up". Es funktioniert nicht mit "Docker Stack Deploy".

Da es sich bei der Verwendung von "Docker Stack Deploy" um einen Hinweis handelt, wird er meiner Meinung nach so geschrieben, dass er nur funktioniert, wenn Sie den Befehl "Docker-Compose Up" verwenden. In Wirklichkeit handelt es sich jedoch nicht nur um den Befehl "Docker-Compose Up", sondern auch um "Docker-Compose Up" `Arbeit für Befehle.

Insbesondere funktioniert es auch mit den Befehlen "Docker-Compose Build" und "Docker-Compose Config".

Wenn Sie als Test "Docker-Compose-Konfiguration" im aktuellen Status ausführen, ist dies wie folgt. (docker-compose config ist ein Befehl zum Überprüfen der endgültigen auszuführenden yml.)

% docker-compose config
services:
  variable-substitution:
    image: busybox:musl
version: '3'

Sie können sehen, dass der Teil "$ {BUSYBOX_VERSION}" zu einer Variablen erweitert wird und zu "Busybox: Musl" wird.

Schreiben Sie als Nächstes . / Variable-substitution-dotenv / .env auf den folgenden Inhalt und führen Sie docker-compose config aus, um Folgendes zu erhalten.

./variable-substitution-dotenv/.env


BUSYBOX_VERSION=latest

% docker-compose config
services:
  variable-substitution:
    image: busybox:latest
version: '3'

In ähnlicher Weise können Sie sehen, dass der Teil "$ {BUSYBOX_VERSION}" zu "Busybox: Neueste" erweitert wurde.

Es wurde bestätigt, dass Variablen mithilfe der Datei ".env" an "Docker-Compose" übergeben werden können.

Es ist leicht, die Funktion zum Ersetzen von Variablen mithilfe der .env-Datei und des Umgangs damit falsch zu verstehen.

Natürlich können die folgenden Konfigurationen ".env", "Dockerfile" und "docker-compose.yml" nicht "erstellt" werden.

./variable-substitution-dotenv-dockerfile-not-work/.env

./variable-substitution-dotenv-dockerfile-not-work/.env


BUSYBOX_VERSION="latest"

./variable-substitution-dotenv-dockerfile-not-work/Dockerfile

./variable-substitution-dotenv-dockerfile-not-work/Dockerfile


FROM busybox:${BUSYBOX_VERSION}

./variable-substitution-dotenv-dockerfile-not-work/docker-compose.yml

./variable-substitution-dotenv-dockerfile-not-work/docker-compose.yml


version: '3'
services:
  variable-substitution-dotenv-dockerfile-not-work:
    build:
      context: ./

Lauf.

% docker-compose build --no-cache
Building variable-substitution-dotenv-dockerfile-not-work
Step 1/1 : FROM busybox:${BUSYBOX_VERSION}
ERROR: Service 'variable-substitution-dotenv-dockerfile-not-work' failed to build : invalid reference format

Es ist natürlich, wenn Sie die Funktionsprüfung und das offizielle Dokument bisher gelesen haben, aber es befindet sich im folgenden Zustand.

Um "bauen" zu können, benötigen Sie die folgende Konfiguration.

./variable-substitution-dotenv-dockerfile-work/.env

./variable-substitution-dotenv-dockerfile-work/.env


BUSYBOX_VERSION="latest"

./variable-substitution-dotenv-dockerfile-work/Dockerfile

./variable-substitution-dotenv-dockerfile-work/Dockerfile


ARG BUSYBOX_VERSION
FROM busybox:${BUSYBOX_VERSION}

./variable-substitution-dotenv-dockerfile-work/docker-compose.yml

./variable-substitution-dotenv-dockerfile-work/docker-compose.yml


version: '3'
services:
  variable-substitution-dotenv-dockerfile-work:
    build:
      context: ./
      args:
        BUSYBOX_VERSION: ${BUSYBOX_VERSION}

Lauf.

% docker-compose build --no-cache
Building variable-substitution-dotenv-dockerfile-work
Step 1/2 : ARG BUSYBOX_VERSION
Step 2/2 : FROM busybox:${BUSYBOX_VERSION}
latest: Pulling from library/busybox
9758c28807f2: Pull complete
Digest: sha256:a9286defaba7b3a519d585ba0e37d0b2cbee74ebfe590960b0b1d6a5e97d1e1d
Status: Downloaded newer image for busybox:latest
 ---> f0b02e9d092d

Successfully built f0b02e9d092d
Successfully tagged variable-substitution-dotenv-dockerfile-work_variable-substitution-dotenv-dockerfile-work:latest

Durch Ändern des in ".env" definierten Werts von "BUSYBOX_VERSION" können Sie den Wert ändern, ohne die Umgebungsvariablen der Shell-Ausführungsumgebung zu verschmutzen.

Im obigen Beispiel wird der Variablenname "BUSYBOX_VERSION" jedoch an verschiedenen Stellen verwendet (".env", "Dockerfile" und "docker-compose.yml"), was etwas schwer zu verstehen ist.

Um es etwas klarer und expliziter auszudrücken: ".env", "Dockerfile" und "docker-compose.yml" lauten wie folgt.

./variable-substitution-dotenv-dockerfile-work-easy-to-read/.env

./variable-substitution-dotenv-dockerfile-work-easy-to-read/.env


DOCKER_COMPOSER_BUSYBOX_VERSION="latest"

./variable-substitution-dotenv-dockerfile-work-easy-to-read/Dockerfile

./variable-substitution-dotenv-dockerfile-work-easy-to-read/Dockerfile


ARG BUSYBOX_VERSION="latest"
FROM busybox:${BUSYBOX_VERSION}

./variable-substitution-dotenv-dockerfile-work-easy-to-read/docker-compose.yml

./variable-substitution-dotenv-dockerfile-work-easy-to-read/docker-compose.yml


version: '3'
services:
  variable-substitution-dotenv-dockerfile-work-easy-to-read:
    build:
      context: ./
      args:
        BUSYBOX_VERSION: ${DOCKER_COMPOSER_BUSYBOX_VERSION}

Die Wörter "Variablen" und "Umgebungsvariablen" sind oft verwirrend. Wenn Sie sich also die spezifischen Variablennamen ansehen, können Sie sehen, was als Variablen und Werte vererbt wird.

Nur weil der Name (Bezeichnung) verwirrend ist, können Sie den Mechanismus zum Übergeben des Variablennamens und -werts als .env-> docker-compose.yml-> Dockerfile verstehen.

In Bezug auf die Funktion zum Ersetzen von Variablen mit der Datei ".env" (ich bezweifle, dass dieser Ausdruck korrekt ist ...) ** Die Funktion zum Ersetzen von Variablen mit der Datei ".env" hat eine Variable in "docker-compose.yml" Es ist möglicherweise einfacher zu verstehen, wenn Sie es als einen Mechanismus zum Übergeben von Werten betrachten **.

Ein wenig beiseite

Tatsächlich empfehle ich den folgenden Schreibstil nicht, wie oben dargestellt.

ARG BUSYBOX_VERSION="latest"
FROM busybox:${BUSYBOX_VERSION}

Beispielsweise bleiben aufgrund der Einschränkungen von Github-Aktionen (usw.) die folgenden Fälle weiterhin bestehen.

Die erste Anweisung in der Dockerfile-Datei muss FROM sein.

https://docs.github.com/ja/free-pro-team@latest/actions/creating-actions/dockerfile-support-for-github-actions#from

Erstens ist es angesichts der Einheitlichkeit der Umgebung (Entwicklung | Ausführung) wünschenswert, einen zuverlässigen Wert für den TAG-Wert von FROM zu verwenden, ohne auch nur "neueste" zu verwenden.

Natürlich kann es Fälle geben, in denen dies nicht der Fall ist, aber es gibt Probleme wie das Nichtwilligen größerer Versions-Upgrades in Abhängigkeit vom Build-Timing.

Anwendungsbeispiel

Wenn Sie beispielsweise "Docker-Compose Build" ausführen, können Sie die Ausführung von "Garnlauf {Skript}" durch lokale, Staging-, Produktions- und andere Umgebungen steuern.

Angenommen, Sie haben separate Build-Umgebungen für Lokal, Staging und Produktion und jede hat eine .env-Datei.

.env


#...Abkürzung...
DOCKER_COMPOSE_BUILD_TYPE="dev"
#...Abkürzung...

.env


#...Abkürzung...
DOCKER_COMPOSE_BUILD_TYPE="dev"
#...Abkürzung...

.env


#...Abkürzung...
DOCKER_COMPOSE_BUILD_TYPE="prod"
#...Abkürzung...

Nehmen Sie außerdem an, dass diese .envs gitignore sind und nicht vom Repository verwaltet werden.

In diesem Zustand ist es durch Vorbereiten von "Dockerfile" und "docker-compose.yml" wie folgt möglich, jede Umgebung unter Beibehaltung eines einzelnen Quellcodes zu steuern.

Dockerfile

#...Abkürzung...
ARG BUILD_TYPE="local"
#...Abkürzung...
RUN yarn run ${BUILD_TYPE}
#...Abkürzung...

docker-compose.yml

docker-compose.yml


#...Abkürzung...
    build:
#...Abkürzung...
      args:
        BUILD_TYPE: ${DOCKER_COMPOSE_BUILD_TYPE}
#...Abkürzung...

Sie können auch "Umgebung:" verwenden, um das Protokollziel, den Mail-Treiber und den DB-Treiber für jede Umgebung zu ändern.

Wenn Sie mit PHP entwickeln, können Sie xdebug aktivieren und deaktivieren und verschiedene Einstellungswerte über .env jeder Person frei ändern.

Recommended Posts

Verwendung der Dateien args :, environment :, env_file: und .env mit dem Befehl docker-compose
Verwendung von String [] args
Verwendung von StringBurrer und Arrays.toString.
Verwendung von EventBus3 und ThreadMode
Wie man Gleichheit und Gleichheit benutzt (wie man Gleichheit benutzt)
Wie man mssql-tools mit alpine benutzt
[Docker-compose] Verwendung unbenannter und benannter Volumes von Volumes. Binden Sie die Halterung
Verwendung von MinIO mit derselben Funktion wie S3 Verwenden Sie Docker-Compose
So teilen Sie Dateien mit Docker Toolbox
Verwendung von binding.pry für die Ansichtsdatei
Verwendung von OrientJS und OrientDB zusammen
Verwendung von BootStrap mit Play Framework
[Java] Wie man Dateien ausgibt und schreibt!
So richten Sie kapt ein und verwenden es
Verwendung von Umgebungsvariablen in RubyOnRails
So überwachen Sie Nginx mit Docker-Compose mit Datadog
Verwendung von Teilzeichenfolgen und Substratmethoden
Verwendung von @Builder und @NoArgsConstructor zusammen
So erstellen Sie eine Rails 6-Umgebung mit Docker
Wie kann ich mit NUXTJS Official S3 und CloudFront für AWS bereitstellen? Mit Docker-Compose
[Swift] So verbinden Sie TabBar mit Storyboard Reference und verwenden auch NavigationController
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
[Ruby] Verwendung der gsub-Methode und der sub-Methode
Verwendung des Java-Frameworks mit AWS Lambda! ??
Verwendung der Java-API mit Lambda-Ausdrücken
Verwendung der Scope- und Pass-Verarbeitung (Servist)
So erstellen Sie eine API mit GraphQL und Rails
Verwendung des NFS-Protokolls Version 2 mit Ubuntu 18.04
So löschen Sie eine Ressourcendatei mit Spring-Boot
[Rails] So erstellen Sie eine Umgebung mit Docker
So erstellen Sie Parkett-Tools und führen Parkett-Dateien zusammen
So verwenden Sie Eclipse auf meinem PC mit 32 Bit und 2 GB Speicher
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
[Java] Verwendung der Kalenderklasse und der Datumsklasse
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
[Grobe Erklärung] So trennen Sie den Betrieb der Produktionsumgebung und der Entwicklungsumgebung mit Rails
Verwendung von Oracle JDK 9 EA mit Travis CI
Verwendung der Z3-Bibliothek in Scala mit Eclipse
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
[Docker-Umgebung] Umgang mit ActiveSupport :: MessageEncryptor :: InvalidMessage
So serialisieren und deserialisieren Sie den LocalDateTime-Typ mit GSON
Verwendung der JDD-Bibliothek in Scala mit Eclipse
So erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
Booten nach Umgebung mit Spring Boot of Maven
So installieren Sie Gradle und Kotlin mit SDKMAN (Mac)
Verwendung und Anwendung der JFrame / Canvas-Klasse von Java
Verwendung von Map
Wie benutzt man rbenv?