{{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