Construire, marquer et publier une image
Explication
Dans ce guide, vous apprendrez ce qui suit :
- Construire des images - le processus de construction d'une image basé sur un
Dockerfile
- Marquer des images - le processus de donner un nom à une image, qui détermine également où l'image peut être distribuée
- Publier des images - le processus de distribution ou de partage de l'image nouvellement créée à l'aide d'un registre de conteneurs
Construire des images
Le plus souvent, les images sont construites à l'aide d'un Dockerfile. La commande docker build
la plus basique pourrait ressembler à ce qui suit :
docker build .
Le .
final de la commande fournit le chemin ou l'URL du contexte de construction. À cet emplacement, le constructeur trouvera le Dockerfile
et d'autres fichiers référencés.
Lorsque vous exécutez une construction, le constructeur extrait l'image de base, si nécessaire, puis exécute les instructions spécifiées dans le Dockerfile.
Avec la commande précédente, l'image n'aura pas de nom, mais la sortie fournira l'ID de l'image. Par exemple, la commande précédente pourrait produire la sortie suivante :
$ docker build .
[+] Building 3.5s (11/11) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 308B 0.0s
=> [internal] load metadata for docker.io/library/python:3.12 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/6] FROM docker.io/library/python:3.12 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 123B 0.0s
=> [2/6] WORKDIR /usr/local/app 0.0s
=> [3/6] RUN useradd app 0.1s
=> [4/6] COPY ./requirements.txt ./requirements.txt 0.0s
=> [5/6] RUN pip install --no-cache-dir --upgrade -r requirements.txt 3.2s
=> [6/6] COPY ./app ./app 0.0s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:9924dfd9350407b3df01d1a0e1033b1e543523ce7d5d5e2c83a724480ebe8f00 0.0s
Avec la sortie précédente, vous pourriez démarrer un conteneur en utilisant l'image référencée :
docker run sha256:9924dfd9350407b3df01d1a0e1033b1e543523ce7d5d5e2c83a724480ebe8f00
Ce nom n'est certainement pas mémorable, c'est là que le marquage devient utile.
Marquer des images
Le marquage des images est la méthode pour donner à une image un nom mémorable. Cependant, il y a une structure au nom d'une image. Un nom d'image complet a la structure suivante :
[HÔTE[:NUMÉRO_PORT]/]CHEMIN[:MARQUE]
HÔTE
: Le nom d'hôte de registre facultatif où l'image est située. Si aucun hôte n'est spécifié, le registre public de Docker àdocker.io
est utilisé par défaut.NUMÉRO_PORT
: Le numéro de port du registre si un nom d'hôte est fourniCHEMIN
: Le chemin de l'image, composé de composants séparés par des barres obliques. Pour Docker Hub, le format suit[ESPACE_DE_NOMS/]DÉPÔT
, où l'espace de noms est soit le nom d'un utilisateur, soit celui d'une organisation. Si aucun espace de noms n'est spécifié,library
est utilisé, qui est l'espace de noms pour les images officielles Docker.MARQUE
: Un identifiant personnalisé et lisible par l'homme qui est généralement utilisé pour identifier différentes versions ou variantes d'une image. Si aucune marque n'est spécifiée,latest
est utilisé par défaut.
Voici quelques exemples de noms d'images :
nginx
, équivalent àdocker.io/library/nginx:latest
: cela extrait une image du registredocker.io
, de l'espace de nomslibrary
, du dépôt d'imagesnginx
et de la marquelatest
.docker/welcome-to-docker
, équivalent àdocker.io/docker/welcome-to-docker:latest
: cela extrait une image du registredocker.io
, de l'espace de nomsdocker
, du dépôt d'imageswelcome-to-docker
et de la marquelatest
ghcr.io/dockersamples/example-voting-app-vote:pr-311
: cela extrait une image du registre de conteneurs GitHub, de l'espace de nomsdockersamples
, du dépôt d'imagesexample-voting-app-vote
et de la marquepr-311
Pour marquer une image lors d'une construction, ajoutez l'indicateur -t
ou --tag
:
docker build -t mon-nom-d-utilisateur/mon-image .
Si vous avez déjà construit une image, vous pouvez ajouter une autre marque à l'image en utilisant la commande docker image tag
:
docker image tag mon-nom-d-utilisateur/mon-image autre-nom-d-utilisateur/autre-image:v1
Publier des images
Une fois que vous avez une image construite et marquée, vous êtes prêt à la pousser vers un registre. Pour ce faire, utilisez la commande docker push
:
docker push mon-nom-d-utilisateur/mon-image
En quelques secondes, toutes les couches de votre image seront poussées vers le registre.
Authentification requise
Avant de pouvoir pousser une image vers un dépôt, vous devrez être authentifié. Pour ce faire, utilisez simplement la commande docker login.
Essayez-le
Dans ce guide pratique, vous allez construire une image simple à l'aide d'un Dockerfile fourni et la pousser vers Docker Hub.
Configuration
-
Obtenez l'application exemple.
Si vous avez Git, vous pouvez cloner le dépôt de l'application exemple. Sinon, vous pouvez télécharger l'application exemple. Choisissez l'une des options suivantes.
Utilisez la commande suivante dans un terminal pour cloner le dépôt de l'application exemple. ```console $ git clone https://github.com/docker/getting-started-todo-app ```
Téléchargez la source et extrayez-la. <div class="button not-prose"> <a href="https://github.com/docker/getting-started-todo-app/raw/cd61f824da7a614a8298db503eed6630eeee33a3/app.zip">Télécharger la source</a> </div>
-
Téléchargez et installez Docker Desktop.
-
Si vous n'avez pas encore de compte Docker, créez-en un maintenant. Une fois que vous avez fait cela, connectez-vous à Docker Desktop en utilisant ce compte.
Construire une image
Maintenant que vous avez un dépôt sur Docker Hub, il est temps pour vous de construire une image et de la pousser vers le dépôt.
-
En utilisant un terminal à la racine du dépôt de l'application exemple, exécutez la commande suivante. Remplacez
VOTRE_NOM_D_UTILISATEUR_DOCKER
par votre nom d'utilisateur Docker Hub :$ docker build -t <VOTRE_NOM_D_UTILISATEUR_DOCKER>/concepts-build-image-demo .
Par exemple, si votre nom d'utilisateur est
mobywhale
, vous exécuteriez la commande :$ docker build -t mobywhale/concepts-build-image-demo .
-
Une fois la construction terminée, vous pouvez afficher l'image en utilisant la commande suivante :
$ docker image ls
La commande produira une sortie similaire à la suivante :
REPOSITORY TAG IMAGE ID CREATED SIZE mobywhale/concepts-build-image-demo latest 746c7e06537f 24 seconds ago 354MB
-
Vous pouvez réellement afficher l'historique (ou comment l'image a été créée) en utilisant la commande docker image history :
$ docker image history mobywhale/concepts-build-image-demo
Vous verrez alors une sortie similaire à la suivante :
IMAGE CREATED CREATED BY SIZE COMMENT f279389d5f01 8 seconds ago CMD ["node" "./src/index.js"] 0B buildkit.dockerfile.v0 <missing> 8 seconds ago EXPOSE map[3000/tcp:{}] 0B buildkit.dockerfile.v0 <missing> 8 seconds ago WORKDIR /app 8.19kB buildkit.dockerfile.v0 <missing> 4 days ago /bin/sh -c #(nop) CMD ["node"] 0B <missing> 4 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B <missing> 4 days ago /bin/sh -c #(nop) COPY file:4d192565a7220e13… 20.5kB <missing> 4 days ago /bin/sh -c apk add --no-cache --virtual .bui… 7.92MB <missing> 4 days ago /bin/sh -c #(nop) ENV YARN_VERSION=1.22.19 0B <missing> 4 days ago /bin/sh -c addgroup -g 1000 node && addu… 126MB <missing> 4 days ago /bin/sh -c #(nop) ENV NODE_VERSION=20.12.0 0B <missing> 2 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 2 months ago /bin/sh -c #(nop) ADD file:d0764a717d1e9d0af… 8.42MB
Cette sortie montre les couches de l'image, en mettant en évidence les couches que vous avez ajoutées et celles qui ont été héritées de votre image de base.
Pousser l'image
Maintenant que vous avez une image construite, il est temps de pousser l'image vers un registre.
-
Poussez l'image en utilisant la commande docker push :
$ docker push <VOTRE_NOM_D_UTILISATEUR_DOCKER>/concepts-build-image-demo
Si vous recevez un
accès refusé à la ressource demandée
, assurez-vous d'être à la fois connecté et que votre nom d'utilisateur Docker est correct dans l'étiquette de l'image.Après quelques instants, votre image devrait être poussée vers Docker Hub.
Ressources supplémentaires
Pour en savoir plus sur la construction, le marquage et la publication d'images, visitez les ressources suivantes :
- Qu'est-ce qu'un contexte de construction ?
- référence docker build
- référence docker image tag
- référence docker push
- Qu'est-ce qu'un registre ?
Étapes suivantes
Maintenant que vous avez appris à construire et à publier des images, il est temps d'apprendre à accélérer le processus de construction en utilisant le cache de construction Docker.