Le Dockerfile contient les instructions permettant de générer l'image, c'est à dire le système de fichier initial visible dans le conteneur. La commande COPY permet d’insérer un fichier provenant de l'hôte ou du système de fichier de base dans le système de fichier de l'image en construction.
COPY afile /image/path
L'option --chown permet de modifier directement le propriétaire sans appeler une deuxième commande qui introduit un layer supplémentaire dans l'image:
COPY --chown=0:0 bareos-database-common.conf /etc/dbconfig-com
L'option --chmod existe également mais il est nécessaire d'activer le BuildKit pour pouvoir l'utiliser sans générer d'erreur à la construction de l'image:
DOCKER_BUILDKIT=1 docker image build -t image/label:version .
docker image build
on peut l'ajouter au fichier .env ou l'exporter dans le shell courant.
Il est possible de modifier la configuration du daemon Docker pour que le BuilKit soit utilisé par défaut par le client docker. Pour cela il faut modifier le fichier /etc/docker/daemon.json
:
{ "data-root": "/srv/docker", "features": { "buildkit" : true } }
Dans ce cas, il est inutile d'exporter la variable DOCKER_BUILDKIT.
docker-compose doit être paramétré pour utiliser le client docker pour la construction des images. Pour cela on exporte la variable COMPOSE_DOCKER_CLI_BUILD ou on l'ajoute dans le fichier .env:
Pour pouvoir l'utiliser, les variables d'environnement COMPOSE_DOCKER_CLI_BUILD=1 et DOCKER_BUILDKIT=1 doivent être définies.
Ici on les ajoute dans le fichier .env:
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1
La commande docker-compose build peut ensuite être utilisée normalement et ne générera plus d'erreur:
docker-compose build