J'ai le fichier docker-compose suivant
version: '3'
services:
node1:
build: node1
image: node1
container_name: node1
node2:
build: node2
image: node2
container_name: node2
Je peux construire les deux images et les démarrer avec une seule commande
docker-compose up -d --build
Mais j'aimerais utiliser build-args sur les builds. Le script de construction original de l'image en dehors de la portée de composition ressemble à ceci:
#!/bin/sh
docker build \
--build-arg ADMIN_USERNNAME_1=weblogic \
--build-arg ADMIN_PASSWORD_1=weblogic1 \
--build-arg ADMIN_NAME_1=admin \
--build-arg ...
--build-arg ... \
-t test/foo .
Les deux images utiliseraient des build-args du même nom mais de valeur différente. De plus, comme il existe des dizaines d'arguments de génération, il serait pratique de les stocker dans un fichier de propriétés de génération spécifique au service de composition. Est-ce possible avec docker-compose?
Vous pouvez définir votre args
avec votre commande de compilation de docker-compose.
Exemple Dockerfile:
FROM nginx:1.13
RUN apt-get -y update && apt-get install -y \
Apache2-utils && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ARG username
ARG password
RUN htpasswd -bc /etc/nginx/.htpasswd $username $password
docker-composer le fichier:
version: '3'
services:
node1:
build: ./dir
Le ./dir
contient le fichier Docker et je construis avec cette commande:
docker-compose build --build-arg username="my-user" --build-arg password="my-pass"
Je vois déjà:
Step 5/5 : RUN htpasswd -bc /etc/nginx/.htpasswd $username $password
---> Running in 80735195e35d
Adding password for user my-user
---> c52c92556825
J'apporte ma pile
docker-compose up -d
Maintenant, je peux vérifier à l'intérieur du conteneur nginx, ainsi que mon nom d'utilisateur et mon mot de passe (chiffré):
docker@default:~/test$ docker exec -it test_node1_1 bash
root@208e4d75e2bd:/# cat /etc/nginx/.htpasswd
my-user:$apr1$qg4I/5RO$KMaOPvjbnKdZH37z2WYfe1
En utilisant cette méthode, vous pouvez passer build args
à votre pile docker-compose
.
Vous pouvez spécifier les arguments directement dans votre fichier docker-compose:
node1:
build: node1
args:
ADMIN_USERNNAME: weblogic1
ADMIN_PASSWORD: weblogic1
ADMIN_NAME: admin1
image: node1
container_name: node1
Voir la documentation officielle pour plus de détails.