que imagen example enable ejemplos crear copiar contenedor container ssh docker docker-registry

imagen - enable ssh docker container



Empuje de imagen Docker sobre SSH(distribuido) (3)

Guardar / cargar una imagen en un host Docker y enviarlo a un registro (privado o Hub) son dos cosas diferentes.

El antiguo @Thomasleveil ya se ha dirigido.

Este último realmente tiene la "inteligencia" para empujar solo las capas requeridas.

Puede probarlo fácilmente usted mismo con un registro privado y un par de imágenes derivadas.

Si tenemos dos imágenes y una se deriva de la otra, entonces hacemos:

docker tag baseimage myregistry:5000/baseimage docker push myregistry:5000/baseimage

empujará todas las capas que aún no se encuentran en el registro. Sin embargo, cuando luego presionas la imagen derivada a continuación:

docker tag derivedimage myregistry:5000/derivedimage docker push myregistry:5000/derivedimage

puede notar que solo se empuja una capa, siempre que su Dockerfile haya sido construido de tal manera que solo requiera una capa (por ejemplo, encadenamiento de parámetros RUN, según las mejores prácticas de Dockerfile ).

En su host Docker, también puede ejecutar un registro privado Dockerised.

Ver registro Docker en contenedor

Por lo que sé y al momento de escribir esto, el mecanismo de inserción / extracción / consulta del registro no es compatible con SSH, sino solo con HTTP / HTTPS. Eso es diferente a Git y amigos.

Consulte Registro inseguro para saber cómo ejecutar un registro privado a través de HTTP, sobre todo tenga en cuenta que necesita cambiar las opciones del motor Docker y reiniciarlo:

Abra el archivo / etc / default / docker o / etc / sysconfig / docker para editar.

Dependiendo de su sistema operativo, las opciones de inicio de su daemon de motor.

Edite (o agregue) la línea DOCKER_OPTS y agregue el indicador --insecure-registry.

Esta bandera toma la URL de su registro, por ejemplo.

DOCKER_OPTS = "- insegure-registry myregistrydomain.com:5000"

Cierre y guarde el archivo de configuración.

Reinicie su demonio Docker

También encontrará instrucciones para utilizar certificados autofirmados, lo que le permite utilizar HTTPS.

Usando certificados autofirmados

[...]

Esto es más seguro que la solución de registro insegura. Debe configurar cada demonio docker que quiera acceder a su registro

Generate your own certificate: mkdir -p certs && openssl req / -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key / -x509 -days 365 -out certs/domain.crt Be sure to use the name myregistrydomain.com as a CN. Use the result to start your registry with TLS enabled Instruct every docker daemon to trust that certificate. This is done by copying the domain.crt file to /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt. Don’t forget to restart the Engine daemon.

TL; DR Básicamente, estoy buscando esto:

docker push myimage ssh://myvps01.vpsprovider.net/

Estoy fallando en comprender la razón detrás de todo el asunto de Docker Hub / Registry. Sé que puedo ejecutar un registro privado, pero para eso tengo que configurar la infraestructura de ejecutar realmente un servidor.

Eché un vistazo dentro del funcionamiento interno de Docker (bueno, el sistema de archivos por lo menos), y parece que las capas de imagen de Docker son solo un montón de archivos comprimidos, más o menos, con algunos nombres de archivos elaborados. Pienso ingenuamente que no sería imposible preparar una simple secuencia de comandos de Python para hacer push / pull distribuido, pero por supuesto no lo intenté, por eso hago esta pregunta.

¿Hay alguna razón técnica por la que Docker no pudiera simplemente hacer push / pull distribuido (sin servidor), como Git o Mercurial?

Creo que esto sería una gran ayuda, ya que podría simplemente empujar las imágenes que construí en mi computadora portátil directamente en los servidores de la aplicación, en lugar de empujar primero a un servidor de recompra en algún lugar y luego extraerlos de los servidores de la aplicación. ¿O tal vez acabo de entender mal el concepto y el Registro es una característica realmente esencial que necesito absolutamente?

EDITAR Algún contexto que espero explique por qué quiero esto, considere el siguiente escenario:

  • Desarrollo, pruebas realizadas en mi computadora portátil (OSX, ejecutando Docker machine, usando docker-compose para definir servicios y dependencias)
  • Implementar en un entorno en vivo por medio de un script (auto-escrito, bash, pocas dependencias en la máquina de desarrollo, básicamente solo en la máquina de Docker)
  • Implementar en un nuevo VPS con muy pocas dependencias, excepto el acceso SSH y el demonio Docker.
  • No hay servicios "permanentes" que se ejecuten en ninguna parte, es decir, específicamente no quiero alojar un registro que se ejecute de forma permanente (especialmente no es accesible para todas las instancias de VPS, aunque eso probablemente podría resolverse con algunos túneles SSH inteligentes)

La mejor solución actual es utilizar la máquina Docker para apuntar al servidor VPS y reconstruirla, pero ralentiza la implementación ya que tengo que crear el contenedor desde el origen cada vez.


Hice una utilidad de línea de comandos solo para este escenario.

Establece un registro de docker privado temporal en el servidor, establece un Túnel SSH desde su host local, empuja su imagen y luego se limpia después de sí mismo.

El beneficio de este enfoque sobre el docker save es que solo las nuevas capas se insertan en el servidor, lo que resulta en una carga más rápida.

A menudo, el uso de un registro intermedio como dockerhub es indeseable y engorroso.

https://github.com/coherenceapi/docker-push-ssh

Instalar:

pip install docker-push-ssh

Ejemplo:

docker-push-ssh -i ~/my_ssh_key [email protected] my-docker-image

La advertencia más grande es que tiene que agregar manualmente su IP local a la configuración insegure_registries del docker.

https://.com/questions/32808215/where-to-set-the-insecure-registry-flag-on-mac-os


Si desea enviar imágenes de la ventana acoplable a un host determinado, ya hay todo en Docker para permitirlo. El siguiente ejemplo muestra cómo empujar una imagen de docker a través de ssh:

docker save <my_image> | ssh -C [email protected] docker load

Tenga en cuenta que la combinación de un comando docker registry + docker pull tiene la ventaja de que solo descarga las capas faltantes. Por lo tanto, si actualiza con frecuencia una imagen de la ventana acoplable (agregando nuevas capas o modificando algunas de las últimas capas), el comando de docker pull la docker pull generará menos tráfico de red que el envío de imágenes de la ventana acoplable completa a través de ssh.