Comment partager mon image Docker sans utiliser le Docker-Hub?

Je me demande où les images de Docker sont exactement stockées dans ma machine hôte locale. Puis-je partager mon image Docker sans utiliser le Docker-Hub ou un Dockerfile mais la “vraie” image Docker? Et que se passe-t-il exactement lorsque je “pousse” mon Docker-Image sur Docker-Hub?

Les images Docker sont stockées en tant que couches de système de fichiers. Chaque commande du fichier Docker crée un calque. Vous pouvez également créer des calques en utilisant docker commit partir de la ligne de commande après avoir effectué certaines modifications (via probablement l’ docker run ).

Ces couches sont stockées par défaut dans /var/lib/docker . Bien que vous puissiez (théoriquement) choisir des fichiers à partir de là et les installer sur un serveur Docker différent, il est probablement une mauvaise idée de jouer avec la représentation interne utilisée par Docker.

Lorsque vous poussez votre image, ces couches sont envoyées au registre (par défaut, le registre docker hub… à moins que vous ne marquiez votre image avec un autre préfixe de registre) et y soyez stockées. Lorsque vous appuyez sur, l’identifiant de la couche est utilisé pour vérifier si vous avez déjà la couche localement ou si vous devez la télécharger. Vous pouvez utiliser l’ docker history du menu fixe pour déterminer les couches (autres images) utilisées (et, dans une certaine mesure, la commande qui a créé la couche).

En ce qui concerne les options permettant de partager une image sans envoyer au registre docker hub, vos meilleures options sont les suivantes:

  • docker save une image ou docker export un conteneur. Cela affichera un fichier tar sur la sortie standard, vous aurez donc envie de faire quelque chose comme docker save 'dockerizeit/agent' > dk.agent.latest.tar . Vous pouvez ensuite utiliser docker load ou docker import dans un autre hôte.

  • Hébergez votre propre registre privé. – obsolète, voir les commentaires Voir l’ image de registre de docker . Nous avons créé un registre protégé par s3 que vous pouvez démarrer et arrêter selon vos besoins (tous les états sont conservés dans le compartiment s3 de votre choix), ce qui est sortingvial à configurer. C’est aussi un moyen intéressant de regarder ce qui se passe lorsque l’on envoie un registre

  • Utilisez un autre registre comme quay.io (je ne l’ai pas essayé personnellement), bien que les problèmes que vous rencontrez avec le docker hub s’appliquent également ici.

Si vous ne souhaitez pas utiliser le Docker Hub lui-même, vous pouvez héberger votre propre référentiel Docker sous Artifactory by JFrog:

https://www.jfrog.com/confluence/display/RTF/Docker+Repositories

qui sera ensuite exécuté sur vos propres serveurs.

D’autres fournisseurs d’hébergement sont disponibles, par exemple CoreOS:

http://www.theregister.co.uk/2014/10/30/coreos_enterprise_registry/

qui a acheté quay.io

Sur la base de ce blog , il est possible de partager une image docker sans registre Docker en exécutant:

 docker save --output latestversion-1.0.0.tar dockerregistry/latestversion:1.0.0 

Une fois cette commande terminée, vous pouvez copier l’image sur un serveur et l’importer comme suit:

 docker load --input latestversion-1.0.0.tar 

L’envoi d’une image fixe sur un serveur distant peut se faire en 3 étapes simples:

  1. Localement, enregistrez l’image docker en tant que .tar : docker save -o

  2. Localement, utilisez scp pour transférer .tar vers la télécommande

  3. Sur le serveur distant, chargez l’image dans docker: docker load -i