Je me demande où les images de Docker sont stockées exactement sur ma machine hôte locale. Puis-je partager ma Docker-Image sans utiliser la Docker-Hub
ou une Dockerfile
mais la «vraie» Docker-Image? Et que se passe-t-il exactement lorsque je «pousse» mon image Docker vers Docker-Hub?
docker
docker-registry
yaquawa
la source
la source
Réponses:
Les images Docker sont stockées sous forme de couches de système de fichiers. Chaque commande du Dockerfile crée un calque. Vous pouvez également créer des calques à l'aide
docker commit
de la ligne de commande après avoir apporté quelques modifications (viadocker run
probablement).Ces couches sont stockées par défaut sous
/var/lib/docker
. Bien que vous puissiez (théoriquement) sélectionner des fichiers à partir de là et les installer sur un autre serveur Docker, c'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 (le registre Docker Hub, par défaut… sauf si vous marquez votre image avec un autre préfixe de registre) et y sont stockées. Lorsque vous appuyez sur, l'ID de couche est utilisé pour vérifier si vous avez déjà la couche localement ou si elle doit être téléchargée. Vous pouvez utiliser
docker history
pour voir quels calques (autres images) sont utilisés (et, dans une certaine mesure, quelle commande a créé le calque).En ce qui concerne les options pour partager une image sans pousser vers le registre Docker Hub, vos meilleures options sont:
docker save
une image oudocker export
un conteneur. Cela produira un fichier tar vers la sortie standard, vous aimerez donc faire quelque chose commedocker save 'dockerizeit/agent' > dk.agent.latest.tar
. Ensuite, vous pouvez utiliserdocker load
oudocker import
dans un hôte différent.Hébergez votre propre registre privé. - Obsolète, voir les commentaires
Voir l' image du registre docker . Nous avons construit un registre soutenu par s3 que vous pouvez démarrer et arrêter au besoin (tout état est conservé dans le compartiment s3 de votre choix), ce qui est trivial à configurer. C'est aussi une façon intéressante de voir ce qui se passe lorsque vous passez à un registreUtilisez un autre registre comme quay.io (je ne l'ai pas personnellement essayé), bien que toutes les préoccupations que vous avez avec le hub docker s'appliquent probablement ici aussi.
la source
docker save
: lorsque je pousse une image qui dérive d'une autre image (disonspython:2.7
) vers un registre, l'image parent n'a pas besoin d'être téléchargée plus d'une fois, sauf si elle change. Puis-je enregistrer des images partielles pour obtenir une optimisation de taille de fichier similaire? Je saute à travers ces cerceaux parce que je suis un amateur avec plusieurs images et je ne veux pas payer pour un registre privé.docker build
sur l'hôte?npm install
... Je ne peux pas construire sur mon hôte car il a très peu de mémoire et cette étape échoue toujours (voir: github.com/npm/npm/issues/5021 )Sur la base de ce blog , on pourrait partager une image Docker sans registre Docker en exécutant:
Une fois cette commande terminée, on pourrait copier l'image sur un serveur et l'importer comme suit:
la source
L'envoi d'une image Docker à un serveur distant peut se faire en 3 étapes simples:
Localement, utilisez scp pour transférer .tar vers la télécommande
Sur le serveur distant, chargez l'image dans le docker:
la source
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 s'exécutera ensuite 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
la source