¿Cómo compartir mi Docker-Image sin usar Docker-Hub?

257

Me pregunto dónde se almacenan exactamente las imágenes de Docker en mi máquina host local. ¿Puedo compartir mi Docker-Image sin usar Docker-Hubo a Dockerfilepero la Docker-Image 'real'? ¿Y qué sucede exactamente cuando 'empujo' mi Docker-Image a Docker-Hub?

yaquawa
fuente
2
Para referencia futura: un buen artículo sobre
cómo

Respuestas:

243

Las imágenes de Docker se almacenan como capas del sistema de archivos. Cada comando en el Dockerfile crea una capa. También puede crear capas utilizando docker commitdesde la línea de comandos después de hacer algunos cambios ( docker runprobablemente a través de ).

Estas capas se almacenan de forma predeterminada en /var/lib/docker. Si bien podría (teóricamente) seleccionar archivos desde allí e instalarlos en un servidor Docker diferente, probablemente sea una mala idea jugar con la representación interna utilizada por Docker.

Cuando empuja su imagen, estas capas se envían al registro (el registro de Docker Hub, por defecto ... a menos que etiquete su imagen con otro prefijo de registro) y se almacenan allí. Al presionar, la identificación de la capa se usa para verificar si ya tiene la capa localmente o si necesita descargarla. Puede usar docker historypara ver qué capas (otras imágenes) se usan (y, en cierta medida, qué comando creó la capa).

En cuanto a las opciones para compartir una imagen sin pasar al registro de Docker Hub, sus mejores opciones son:

  • docker saveuna imagen o docker exportun contenedor Esto generará un archivo tar a la salida estándar, por lo que le gustaría hacer algo como docker save 'dockerizeit/agent' > dk.agent.latest.tar. Luego puede usar docker loado docker importen un host diferente.

  • Hospede su propio registro privado. - Anticuado, ver comentarios Ver la imagen de registro de la ventana acoplable . Hemos creado un registro respaldado por s3 que puede iniciar y detener según sea necesario (todo el estado se mantiene en el bucket de s3 de su elección) que es trivial de configurar. Esta también es una forma interesante de ver lo que sucede cuando se empuja a un registro

  • Use otro registro como quay.io (no lo he probado personalmente), aunque cualquier preocupación que tenga con el Docker Hub probablemente se aplicará aquí también.

Abel Muiño
fuente
66
Para referencia futura, el enlace a la imagen de registro de Docker está desactualizado. Ahora debe usar Docker Registry 2.0 y el código en github / docker / distribution
RoelAdriaans
1
No estoy seguro de que esté claro que Registry 2.0 sea un reemplazo listo para usar para el original. Parece perder algunas funciones básicas, como la búsqueda stackoverflow.com/questions/30113726/docker-registry-2-0-api-v2
JoshRivers
1
Pregunta sobre docker save: cuando inserto una imagen que deriva de otra imagen (digamos python:2.7) en un registro, la imagen principal no necesita cargarse más de una vez a menos que cambie. ¿Puedo guardar imágenes parciales para lograr una optimización de tamaño de archivo similar? Estoy saltando a través de estos aros porque soy un aficionado con múltiples imágenes y no quiero pagar por un registro privado.
Pieter
44
¿No podría simplemente extraer archivos src de un repositorio de git, incluido un Dockerfile, y docker builden el host?
jshxe
1
@Jishaxe parte de mi compilación es npm install... No puedo construir en mi host porque tiene muy poca memoria y este paso siempre falla (ver: github.com/npm/npm/issues/5021 )
Soft Bullets
46

Según este blog , uno podría compartir una imagen de acoplador sin un registro de acoplador ejecutando:

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

Una vez que se ha completado este comando, se puede copiar la imagen a un servidor e importarla de la siguiente manera:

docker load --input latestversion-1.0.0.tar
030
fuente
18

El envío de una imagen acoplable a un servidor remoto se puede realizar en 3 simples pasos:

  1. Localmente, guarde la imagen del acoplador como .tar :
docker save -o <path for created tar file> <image name>
  1. Localmente, use scp para transferir .tar a remoto

  2. En el servidor remoto, cargue la imagen en la ventana acoplable:

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