Vous avez créé une image Docker que vous devez partager avec un collègue ? Voici comment vous pouvez distribuer une image sans que le destinataire ait besoin d'exécuter docker build
eux-mêmes.
Partager une image prédéfinie au lieu d'un Dockerfile
vous permet de vous assurer que votre collègue exécute exactement le même logiciel. La réexécution de la construction pourrait entraîner un environnement subtilement différent. Vous avez deux options pour diffuser votre image, selon la situation.
Utiliser un registre Docker
Le moyen le plus simple de partager une image Docker consiste à la pousser vers un registre Docker. Cette fonctionnalité est entièrement intégrée à la CLI Docker. Vous n'avez pas besoin d'effectuer de transfert manuel de fichiers lorsque vous utilisez cette méthode.
Le registre par défaut est Docker Hub. Cela vous permet de partager publiquement des images et vous donne également un référentiel privé. Créez un compte sur Docker Hub, puis exécutez docker login
dans votre borne. Fournissez les détails de votre compte pour connecter la CLI Docker à votre compte.
Créez ensuite votre image normalement, en utilisant docker build
. Ajoutez une balise commençant par votre nom d'utilisateur Docker Hub :
docker build -t my-account/my-image:latest .
Utilisez ensuite le docker push
commande pour envoyer l'image taguée vers Docker Hub :
docker push my-account/my-image:latest
Votre image est maintenant stockée en toute sécurité dans Docker Hub. Les autres utilisateurs pourront le retirer en utilisant le docker pull
ou docker run
commandes. Vous avez fini de partager votre image !
Pour une utilisation dans le monde réel, Docker Hub peut ne pas suffire. Si vous faites partie d'une équipe de développement, vous souhaiterez probablement conserver les images sur votre propre serveur, au lieu du registre public du Hub. Vous pouvez créer un serveur de registre auto-hébergé à la place pour obtenir un stockage privé entièrement compatible avec le docker push
et docker pull
commandes. Cela vous permet de partager facilement des images avec toute personne pouvant accéder à votre registre privé.
Exportation d'images
Si l'utilisation d'un registre n'est pas une option, vous pouvez exporter manuellement les archives d'images Docker à la place. Cette fonctionnalité est également intégrée à la CLI Docker. Construisez votre image, puis utilisez le docker save
commande pour obtenir un tar
archive de son contenu :
docker save my-image:latest > my-image.tar
L'exportation peut prendre quelques instants. Docker inclura tout le nécessaire pour recréer l'image - c'est-à-dire toutes les couches de votre Dockerfile
, ainsi que les calques hérités de votre image de base. L'archive contiendra également des informations sur les balises associées à l'image.
Comme la sortie est un simple tar
fichier, vous êtes maintenant libre de le distribuer de la manière que vous choisissez. Les archives peuvent être assez volumineuses, il est donc généralement préférable de les télécharger sur un serveur de fichiers ou un fournisseur de stockage dans le cloud.
Pour utiliser une image exportée, exécutez le docker load
commande. Ceci accepte un tar
archive produite par docker save
comme flux d'entrée. Docker chargera le contenu de l'archive et l'ajoutera à votre liste d'images locales.
docker load < my-image.tar
Vous verrez maintenant l'image nouvellement importée dans vos docker images
production. Vous êtes prêt à démarrer un nouveau conteneur avec docker run
.
L'exportation et l'importation d'images ajoutent quelques étapes supplémentaires par rapport à l'utilisation d'un registre Docker. Vous devrez transférer manuellement le fichier entre les clients. Par conséquent, cette approche est moins adaptée à une utilisation fréquente, même si elle a aussi ses avantages.
Conversion d'images en tar
archive peut être utile pour le stockage à long terme. Si vous manquez d'espace sur votre serveur de registre, archivez les anciennes images et téléchargez leurs tars
vers le stockage de fichiers de sauvegarde pourrait être un moyen rentable de récupérer une certaine capacité. Vous pourrez toujours récupérer l'image si vous en avez besoin à l'avenir.
Qu'en est-il de "docker export" ?
Docker a une autre commande liée à l'exportation, docker export
. Cela ne doit pas être confondu avec docker save
. Alors que save
fonctionne avec des images, export
gère réellement les conteneurs individuels .
docker export
produira un tar
archive du système de fichiers d'un conteneur. Cela peut être utilisé pour restaurer une réplique du conteneur sur une autre machine. Si vous inspectez le contenu de l'archive, vous verrez qu'il ne s'agit que d'un système de fichiers racine Linux normal, avec des répertoires comme /bin
, /etc
et /usr
.
docker export my-container > my-container.tar
docker export
est utile si vous souhaitez créer un instantané d'un conteneur pour une restauration ultérieure. Cependant, les archives de conteneurs ne sont pas importées de la manière à laquelle vous pourriez vous attendre. Comme un conteneur représente un environnement en direct et en cours d'exécution, vous ne pouvez pas en "importer" un directement. Au lieu de cela, l'importation d'une archive de conteneur construit un nouveau photo.
docker import my-container.tar my-image:latest
Dans cet exemple, Docker prendra le système de fichiers dans my-container.tar
et construit automatiquement une nouvelle image appelée my-image:latest
. Cela aura le même système de fichiers mais pas la même image de base ou la même configuration Docker que le conteneur d'origine que vous avez exporté.
CONNEXE : Comment démarrer avec le nouveau registre de conteneurs Docker de Github
Résumé
Docker facilite le partage d'images d'application et d'environnements de développement avec vos collaborateurs. Il est généralement préférable de transférer les images vers un référentiel centralisé à partir duquel tout le monde peut extraire. Dans certains scénarios, il peut être plus judicieux d'exporter une image vers une archive que vous distribuez manuellement.
Docker vous permet également d'exporter le système de fichiers d'un conteneur pour une restauration ultérieure vers une image. Soyez prudent lorsque vous l'utilisez car il ne s'agit pas d'une reconstruction exacte et toutes les données du système de fichiers ne sont pas incluses. Tous les volumes montés sur le conteneur d'origine ne seront pas inclus dans l'archive du système de fichiers, vous devez donc prendre des mesures pour les sauvegarder séparément.