web-dev-qa-db-fra.com

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

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

219
yaquawa

Les images Docker sont stockées sous forme de couches de système de fichiers. Chaque commande du fichier Docker crée une couche. Vous pouvez également créer des couches en utilisant docker commit à partir de la ligne de commande après quelques modifications (via docker run probablement).

Ces couches sont stockées par défaut sous /var/lib/docker. Bien que vous puissiez (théoriquement) choisir des fichiers à partir de là et les installer sur un autre serveur Docker, il est probablement déconseillé 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 de docker hub, par défaut… sauf si vous marquez votre image avec un autre préfixe de registre) et y sont stockées. En poussant, l'identifiant 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 permettant de partager une image sans pousser dans le registre du docker hub, vos meilleures options sont les suivantes:

  • docker save une image ou docker export un conteneur. Cela produira un fichier tar sur la sortie standard, de sorte que vous aimerez faire quelque chose comme docker save 'dockerizeit/agent' > dk.agent.latest.tar. Ensuite, vous pouvez utiliser docker load ou docker import dans un autre hôte.

  • Hébergez votre propre registre privé. - Obsolète, voir les commentaires  Voir le image du registre de docker . Nous avons construit un registre sauvegardé sur s que vous pouvez démarrer et arrêter à votre guise (tous les états sont conservés dans le compartiment s3 de votre choix), ce qui est simple à configurer. C’est aussi un moyen intéressant de regarder ce qui se passe lorsqu’on passe à un registre.

  • Utilisez un autre registre comme quay.io (je ne l’ai personnellement pas essayé), bien que tout ce que vous avez avec le concentrateur de docker s’appliquera probablement ici aussi.

223
Abel Muiño

Sur la base de ce blog , vous pouvez partager une image de menu fixe sans registre de menu fixe 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
24
030

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

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

qui fonctionnera 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

6
MikeW

L'envoi d'une image de menu fixe à un serveur distant peut être effectué en 3 étapes simples:

  1. Localement, enregistrez l’image de menu en tant que . Tar :
docker save -o <path for created tar file> <image name>
  1. Localement, utilisez scp pour transférer . Tar vers distant

  2. Sur le serveur distant, chargez l'image dans le menu fixe:

docker load -i <path to docker image tar file>
3
JSON C11