Home / Blog / Creación de Imágenes Docker por la vía OFFLINE o mediante Repositorios Nacionales.
Daniel's picture
Daniel M. Fernandez
Comp. Science Engineer
23 Jan 2017
Creación
de Imágenes Docker por la vía OFFLINE o mediante Repositorios Nacionales.

Docker por la vía Offline

Body: 

Como una solución innovadora, para resolver el conocido problema de conectividad en Cuba y el acceso denegado a los servidores de Docker Hub, (lo que forma parte de las restricciones que aplica el gobierno de Estados Unidos hacia Cuba), surgió la idea, que compartiremos con la comunidad de Informáticos interesados en la utilización de esta herramienta.

Con una conexión lenta y elevados costos, a lo que se le adicionan las pasarelas intermedias para acceder directamente a las imágenes que brinda Docker Hub, nos dimos a la tarea de estudiar un procedimiento práctico, mediante el que se pudiera trabajar sobre ambientes Docker por la vía Offline, o con ayuda de Repositorios Nacionales, ya que sólo  dependerá el origen del repositorio a utilizar.

¿Qué necesitamos para comenzar?

  1. Conocimiento básico sobre Docker y su funcionamiento.
  2. Un repositorio Linux, ya sea en localhost, red local, red nacional o donde se tenga el acceso.
  3. Un ambiente Docker inicialmente creado.

Objetivo

Crear Imágenes Docker personalizadas partiendo de Repositorios Nacionales o Locales.

Desarrollo de la Solución

Con la idea de que ya existe previamente un conocimiento básico de Docker, iniciaremos con la creación de una imagen en base Ubuntu, la que tomaremos como primaria para implementar las que necesitemos en entornos posteriores.

El posterior desarrollo estará soportado sobre Ubuntu Xenial.

Para crear estas imágenes utilizaremos la herramienta Debootstrap, habiéndola instalado con anterioridad, ya que no es propiamente de Ubuntu.

Como buena práctica sobre el trabajo en Linux, recomendamos siempre actualizar el sistema de paquetes antes de comenzar.

  1. apt update
  2. apt upgrade

Luego precedemos a instalar

  1. apt install debootstrap

Iniciamos el proceso de creación de la imagen

  1. sudo debootstrap xenial xenial http://repositorio.cu/ubuntu

Con el código anterior creamos una imagen en base Ubuntu Xenial, con nombre xenial partiendo de un repositorio nacional (repositorio.cu), el que hace referencia a la ubicación donde se encuentre el repositorio o mirror de Ubuntu Xenial, este puede ser intercambiado por localhost en caso que poseamos el mirror en nuestra propia máquina. La ejecución de este comando puede demorar unos 6 ó 7 minutos.

 

 

Comando en ejecución

  1. Configuring libgnutls-openssl27:i386...
  2. Configuring iputils-ping...
  3. Configuring apt-utils...
  4. Configuring ureadahead...
  5. Configuring logrotate...
  6. Configuring dh-python...
  7. Configuring python3...

La ejecución anterior nos generará un directorio con la estructura de carpetas como la de cualquier sistema operativo Ubuntu (apt,etc,opt,var…), se procede a continuación a empaquetar estos directorios para  importarlos en Docker como una imagen propia.

 

Como recomendación antes de proceder editamos el fichero /xenial/ etc/apt/sources.list con el objetivo de que todo el proceso de instalación de paquetes en la imagen se haga desde los servidores locales o nacionales según nuestro interés.

Es importante aclarar que no estamos refiriéndonos al fichero sources.list del sistema que contiene la instalación de Docker, sino al referenciado en el directorio de la imagen xenial creada con anterioridad.

  1. nano xenial/etc/apt/sources.list
  2. #ejemplo
  3. deb http://repositorio.cu/ubuntu/ xenial main ..
  4. deb-src http://repositorio.cu/ubuntu xenial main ..
  5. ...
  6. #Editamos como normalmente configuramos cualquier repositorio en linux.

No es objetivo explicar cómo se configura un repositorio en Linux, tomamos como convicción que ya es dominado por el lector.

  1. sudo tar -C xenial -c . | sudo docker import – xenial

Se empaqueta en un tar el directorio creado mediante Debootstrap con nombre xenial, luego se crea una imagen Docker limpia y se importa el contenido de la imagen xenial hacia ella, quedando la imagen personalizada, creada únicamente desde servidores locales o nacionales, sin la necesidad de utilizar servicios de Docker Hub.


Esta imagen ya puede ser ejecutada desde Docker normalmente, así como reutilizable para cualquier configuración personalizada.

  1. docker run xenial cat /etc/lsb-release
  2.  
  3. DISTRIB_ID=Ubuntu
  4. DISTRIB_RELEASE=16.04
  5. DISTRIB_CODENAME=xenial
  6. DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
  7.  
  8.  
  9. docker images
  10. REPOSITORY TAG IMAGE ID CREATED SIZE
  11. xenial latest 65e4fcaa8301 2 weeks ago 230 MB

Conclusiones

En este artículo reflejamos el poder de creación que nos brinda Docker, posibilitándonos, con la explicación anterior, obtener una independencia tecnológica sobre el trabajo con el mismo, ya que no será necesario adherirnos a ningún servicio de Docker Hub, como también podemos de una forma sencilla migrar las implementaciones de cualquier Dockerfile con dependencia de imágenes Docker Hub, pasándolos a obedecer únicamente de nuestras propias imágenes primarias creadas con Debootstrap y Docker Import.