{{tag>sysadmin dev docker dockerfile commande}}
====== Dockerfile : La commande COPY ======
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
===== Options =====
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 .
Pour éviter de spécifier la variable à chaque commande ''docker image build'' on peut l'ajouter au fichier **.env** ou l'exporter dans le shell courant.
===== Activer BuildKit par défaut =====
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**.
===== Utiliser le BuildKit avec docker-compose =====
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**:
Le buildkit est supporté par docker-compose à partir de la version 1.25.0.
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
===== Références =====
* https://stackoverflow.com/questions/67910547/why-docker-copy-doesnt-change-file-permissions-chmod
* https://docs.docker.com/build/buildkit/#getting-started
* https://stackoverflow.com/questions/58592259/how-do-you-enable-buildkit-with-docker-compose