Comment utiliser les fichiers args:, environment:, env_file: et .env avec la commande docker-compose

Comment utiliser les fichiers args:, environment:, env_file: et .env avec la commande docker-compose

Dans docker-compose v3, je me perdais parfois à cause de l'utilisation de args:, environment:, env_file: et du fichier .env, donc je l'ai organisé pour moi-même.

Sommaire

À propos de args:

--C'est une variable de construction ――Ainsi, il n'existe pas au moment de run --Si vous déclarez la même variable, c'est docker-compose.yml> Dockerfile

À propos de environnement:

À propos de env_file:

--C'est un mécanisme pour ajouter des variables d'environnement à partir d'un fichier --Si une variable d'environnement avec le même nom existe, la priorité est environnement:> env_file: --Si vous spécifiez plusieurs env_file:, la dernière valeur de la liste sera ajoutée / écrasée.

À propos de .env

Comment utiliser args:

Tout d'abord, le document officiel.

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

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

Traduction gratuite: vous pouvez définir des variables pour la construction.

Un mécanisme qui vous permet de définir des variables de construction.

ARG_VALUE1 --Déclarez et définissez les valeurs jusqu'à ARG_VALUE4 comme suit, puis vérifiez le comportement.

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"

Courir.

% docker-compose build --no-cache && docker-compose up
...Abréviation...
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
...Abréviation...
[Warning] One or more build-args [ARG_VALUE3] were not consumed
...Abréviation...
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

résultat.

Dockerfile docker-compose.yml Au moment de la construction Quand courir
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

Comment utiliser l'environnement:

Tout d'abord, le document officiel.

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

Add environment variables.

Un mécanisme qui vous permet d'ajouter des variables d'environnement.

Contrairement à la variable de construction mentionnée ci-dessus, il s'agit d'une instruction pour définir la soi-disantvariable d'environnement.

ENV_VALUE1 --Déclarez et définissez des valeurs jusqu'à ENV_VALUE4 comme suit, puis vérifiez le comportement.

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"

Courir.

% docker-compose build --no-cache && docker-compose up
...Abréviation...
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
...Abréviation...
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

résultat.

Dockerfile docker-compose.yml Au moment de la construction Quand courir
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

--Au moment de build, la valeur décrite dans Dockerfile est utilisée. --Au moment de run, la valeur définie dans docker-compose.yml est transmise et écrasée.

Comment utiliser env_file:

Tout d'abord, le document officiel.

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

Add environment variables from a file.

Un mécanisme pour ajouter des «variables d'environnement» à partir d'un «fichier».

ENV_VALUE1 --Déclarez et définissez des valeurs jusqu'à ENV_VALUE5 comme suit, puis vérifiez le comportement.

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"

Courir.

% docker-compose build --no-cache && docker-compose up
...Abréviation...
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
...Abréviation...
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

résultat.

Dockerfile docker-compose.yml some_env.env Au moment de la construction Quand courir
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

Comment utiliser le fichier .env

Le fichier .env est un fichier qui est traité spécialement dans docker-compose.

Utilisé dans la fonction de remplacement de variable.

Fonction de remplacement variable

Le fichier .env est utilisé par la fonction de remplacement de variable de docker-compose, alors essayez d'abord la fonction de remplacement de variable.

Documentation officielle. 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.

Traduction gratuite: Vous pouvez utiliser la variable d'environnement du shell qui exécute docker-compose comme variable de docker-compose.

Préparez . / Variable-substitution / docker-compose.yml avec le contenu suivant.

./variable-substitution/docker-compose.yml


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

Définissez temporairement la variable d'environnement BUSYBOX_VERSION = latest et docker-compose up. (Comme il n'y a pas besoin de build, il sera directement up.)

% env BUSYBOX_VERSION="latest" docker-compose up
...Abréviation...
variable-substitution_variable-substitution_1 exited with code 0

Je l'ai remonté en toute sécurité et j'ai terminé.

De même, définissez BUSYBOX_VERSION = musl sur la variable d'environnement et faites docker-compose up.

% env BUSYBOX_VERSION="musl" docker-compose up
...Abréviation...
variable-substitution_variable-substitution_1 exited with code 0

Cela a également été réussi et terminé.

Pour confirmation, consultez la liste d'images à portée de main avec les images docker.

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

Certes, j'ai confirmé qu'il y avait une image avec le TAG «latest», «musl».

De cette manière, docker-compose a un mécanisme pour passer les variables d'environnement de l'environnement dans lequel le shell est exécuté à docker-compose.

C'est l'une des fonctions de remplacement variables.

fichier .env

La documentation officielle dit:

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.

Traduction gratuite: docker-compose définit la variable d'environnement par défaut lorsqu'il trouve le fichier .env. De plus, les valeurs définies à partir des variables d'environnement du shell seront écrasées par les valeurs définies dans le fichier .env.

Préparez le fichier . / Variable-substitution-dotenv / .env comme indiqué ci-dessous.

./variable-substitution-dotenv/.env


BUSYBOX_VERSION=latest

Même contenu que précédemment, mais préparez . / Variable-substitution-dotenv / docker-compose.yml.

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


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

Dans cet état, essayez up sans définir de variable d'environnement temporaire.

% 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

Vous pouvez voir que «dernier» a été récupéré avec succès.

Ensuite, réécrivez . / Variable-substitution-dotenv / .env avec le contenu suivant.

./variable-substitution-dotev/.env


BUSYBOX_VERSION=musl

Dans cet état, réessayez 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

Vous pouvez voir que «musl» a été tiré et remonté avec succès.

De cette façon, l'utilisation du fichier .env permet de passer des variables à docker-compose sans polluer les variables d'environnement de l'environnement d'exécution du shell.

À propos, le document officiel contient les notes suivantes.

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.

Traduction gratuite

Remarque: pour ceux qui utilisent docker stack deploy Cette fonction utilisant le fichier .env fonctionne uniquement avec la commande docker-compose up. Cela ne fonctionne pas avec docker stack deploy.

Puisqu'il s'agit d'une note lors de l'utilisation de docker stack deploy, je pense qu'il est écrit comme ne fonctionne que lorsque vous utilisez la commande docker-compose up, mais en réalité ce n'est pas seulement la commande docker-compose up, mais docker-compose up `Travaillez pour les commandes.

Plus précisément, il fonctionne également avec les commandes docker-compose build et docker-compose config.

En guise de test, si vous exécutez docker-compose config dans l'état actuel, ce sera comme suit. (docker-compose config est une commande pour vérifier le yml final à exécuter.)

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

Vous pouvez voir que la partie $ {BUSYBOX_VERSION} est développée en une variable et devient busybox: musl.

Ensuite, réécrivez . / Variable-substitution-dotenv / .env avec le contenu suivant et exécutez docker-compose config pour obtenir ce qui suit.

./variable-substitution-dotenv/.env


BUSYBOX_VERSION=latest

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

De même, vous pouvez voir que la partie $ {BUSYBOX_VERSION} est étendue à busybox: latest.

Il a été confirmé que les variables peuvent être passées à docker-compose en utilisant le fichier .env.

Il est facile de mal comprendre la fonction de remplacement de variable en utilisant le fichier .env et comment la gérer.

Bien entendu, les configurations suivantes «.env», «Dockerfile» et «docker-compose.yml» ne peuvent pas être «build».

./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: ./

Courir.

% 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

Il est naturel que vous lisiez jusqu'à présent le contrôle de fonctionnement et le document officiel, mais il est dans l'état suivant.

Pour pouvoir construire, vous devez avoir la configuration suivante.

./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}

Courir.

% 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

--Déclarez la variable BUSYBOX_VERSION en utilisant l'instruction ARG dans le Dockerfile

Maintenant, en changeant la valeur de BUSYBOX_VERSION définie dans .env, vous pouvez changer la valeur sans polluer les variables d'environnement de l'environnement d'exécution du shell.

Cependant, dans l'exemple ci-dessus, le nom de variable BUSYBOX_VERSION est utilisé à divers endroits ( .env, Dockerfile et docker-compose.yml), ce qui est un peu difficile à comprendre.

Pour le dire un peu plus clairement et explicitement, .env, Dockerfile et docker-compose.yml sont les suivants.

./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}

Les mots «variables» et «variables d'environnement» sont souvent déroutants, donc si vous regardez les noms de variables spécifiques, vous pouvez voir ce qui est hérité en tant que variables et valeurs.

Tout simplement parce que le nom (étiquette) est compliqué, vous pouvez comprendre le mécanisme de transmission du nom et de la valeur de la variable sous la forme .env-> docker-compose.yml-> Dockerfile.

Concernant la fonction de remplacement de variable utilisant le fichier .env (je doute que cette expression soit correcte ...) ** La fonction de remplacement de variable utilisant le fichier .env a une variable dans docker-compose.yml Cela peut être plus facile à comprendre si vous le considérez comme un mécanisme de transmission de valeurs **.

Un peu à part

En fait, je ne recommande pas le style d'écriture suivant comme illustré ci-dessus.

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

Par exemple, en raison des restrictions des actions github (etc.), les cas suivants demeurent.

La première instruction du fichier Dockerfile doit être FROM.

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

En premier lieu, compte tenu de l'uniformité de l'environnement (de développement | exécution), il est souhaitable d'utiliser une valeur fiable pour la valeur TAG de FROM sans même utiliser "latest".

Bien sûr, il peut y avoir des cas où ce n'est pas le cas, mais il existe des problèmes tels que le refus de mises à niveau majeures de la version en fonction du moment de la construction.

Exemple d'utilisation

Par exemple, lorsque vous faites docker-compose build, vous pouvez contrôler l'exécution de yarn run {script} par des environnements locaux, de préparation, de production et autres.

Supposons que vous ayez des environnements de construction séparés pour les environnements local, intermédiaire et de production, et que chacun ait un fichier .env.

.env


#...Abréviation...
DOCKER_COMPOSE_BUILD_TYPE="dev"
#...Abréviation...

.env


#...Abréviation...
DOCKER_COMPOSE_BUILD_TYPE="dev"
#...Abréviation...

.env


#...Abréviation...
DOCKER_COMPOSE_BUILD_TYPE="prod"
#...Abréviation...

Supposons également que ces .envs soient gitignore et ne soient pas gérés par le référentiel.

Dans cet état, en préparant comme suit Dockerfile et docker-compose.yml, il est possible de contrôler chaque environnement tout en conservant un code source unique.

Dockerfile

#...Abréviation...
ARG BUILD_TYPE="local"
#...Abréviation...
RUN yarn run ${BUILD_TYPE}
#...Abréviation...

docker-compose.yml

docker-compose.yml


#...Abréviation...
    build:
#...Abréviation...
      args:
        BUILD_TYPE: ${DOCKER_COMPOSE_BUILD_TYPE}
#...Abréviation...

Vous pouvez également utiliser environnement: pour changer la destination du journal, le pilote de messagerie et le pilote de base de données pour chaque environnement.

Si vous développez en utilisant php, vous pouvez activer et désactiver xdebug, et vous pouvez modifier librement diverses valeurs de paramètres via .env de chaque individu.

Recommended Posts

Comment utiliser les fichiers args:, environment:, env_file: et .env avec la commande docker-compose
Comment utiliser String [] args
Comment utiliser StringBurrer et Arrays.toString.
Comment utiliser EventBus3 et ThreadMode
Comment utiliser l'égalité et l'égalité (comment utiliser l'égalité)
Comment utiliser mssql-tools avec Alpine
[Docker-compose] Comment utiliser des volumes de volumes non nommés et nommés. Lier la monture
Comment utiliser MinIO avec la même fonction que S3 Utiliser docker-compose
Comment partager des fichiers avec Docker Toolbox
Comment utiliser binding.pry pour afficher le fichier
Comment utiliser OrientJS et OrientDB ensemble
Comment utiliser BootStrap avec Play Framework
[Java] Comment sortir et écrire des fichiers!
Comment configurer et utiliser kapt
Comment utiliser les variables d'environnement dans RubyOnRails
Comment surveiller nginx avec docker-compose avec datadog
Comment utiliser les méthodes substring et substr
Comment utiliser @Builder et @NoArgsConstructor ensemble
Comment créer un environnement Rails 6 avec Docker
Comment déployer sur AWS à l'aide de NUXTJS S3 et CloudFront officiels? Avec docker-compose
[Swift] Comment connecter TabBar avec Storyboard Reference et également utiliser NavigationController
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
[Ruby] Comment utiliser la méthode gsub et la sous-méthode
Comment utiliser le framework Java avec AWS Lambda! ??
Comment utiliser l'API Java avec des expressions lambda
Comment utiliser la portée et le traitement des passes (servist)
Comment créer une API avec GraphQL et Rails
Comment utiliser le protocole NFS version 2 avec Ubuntu 18.04
Comment sortir un fichier de ressources avec spring-boot
[Rails] Comment créer un environnement avec Docker
Comment créer des outils de parquet et fusionner des fichiers Parquet
Comment utiliser Eclipse sur mon PC avec 32 bits et 2 Go de mémoire
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
[Java] Comment utiliser la classe Calendar et la classe Date
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
[Explication approximative] Comment séparer le fonctionnement de l'environnement de production et de l'environnement de développement avec Rails
Comment utiliser Oracle JDK 9 EA avec Travis CI
Comment utiliser la bibliothèque Z3 dans Scala avec Eclipse
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
[Environnement Docker] Comment gérer ActiveSupport :: MessageEncryptor :: InvalidMessage
Comment sérialiser et désérialiser le type LocalDateTime avec GSON
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Comment créer un environnement de développement Java avec VS Code
Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
Comment démarrer par environnement avec Spring Boot de Maven
Comment installer Gradle et Kotlin avec SDKMAN (Mac)
Comment utiliser et appliquer la classe JFrame / Canvas de Java
Comment utiliser Map
Comment utiliser rbenv