Instalando docker usando la red cubana

Este sería el tercer tutorial de como instalar Docker en Cuba. A diferencia de los otros 2, en este se pretende no usar ningún recurso fuera de cuba y que todo quede en la intranet cubana. Gracias a Argenis Ochoa González(AKA @linux8a) por el aporte a la comunidad.

Objetivo:

Tener todo lo necesario para trabajar con Docker. Usando solamente los recursos que disponemos dentro de nuestra red. Instalaremos Docker, docker-compose y usaremos como mirror el registro de la universidad de las villas. Como extra montaremos localmente un servidor registro de docker y dos imágenes la cual nos ayudara en las implementaciones futuras.

Recopilación:

Este post es una recopilación de todas las notas interactivas del canal de telegram de dockercuba

Requerimiento:

  • Disponer de conexión a internet.

Nota: Puede usar nauta hogar o la red de datos de etecsa. Los recursos que usaremos están libres de costo.

  • Una computadora o una vm con una distro Gnu/Linux Ubuntu

Nota: Estaré usando en esta guía un Ubuntu 20.04. Pero puedes seguirla con cualquier otra versión o con Debian. Cambiando en el source.list por el repo pertinente https://repos.uclv.edu.cu/ubuntu/ o https://repos.uclv.edu.cu/debian/

Comencemos editando nuestro source.list . Para no hacer el ajuste a mano usare el comando sed para cambiar el repo de archive.ubuntu.com a repos.uclv.edu.cu

buscamos nuestro fichero source.list
Ruta: /etc/apt/sources.list

Agregamos estos repos:
sudo sed -i 's/archive.ubuntu.com/repos.uclv.edu.cu/' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/repos.uclv.edu.cu/' /etc/apt/sources.list

Y actualizamos el sistema

sudo apt update && sudo apt upgrade

Instalamos docker y docker-compose:

sudo apt install docker.io docker-compose -y

Si estamos detras de un proxy, crearemos el fichero proxy.conf en al siguiente ruta /etc/apt/apt.conf.d/ y dentro agregamos estas lineas:

Acquire {
HTTP::proxy "http://username:password@ip:port";
HTTPS::proxy "http://username:password@ip:port";
ftp::proxy "http://username:password@ip:port";
}

Nota: Si no existen usuario y contraseña para validar, solo se pone lo que continua después de @, en formato ip:port.

Comprobamos

sudo docker version
o
docker version

El resultado del comando será algo parecido a esto:

sudo docker-compose version 
o 
docker-compose version

Ahora crearemos el daemon.json para usar como mirror el registro de la universidad de las villas.

nano /etc/docker/daemon.json

Agregamos las siguientes lineas:

{
        "registry-mirrors": [
                "https://docker.uclv.cu"
        ]
}

NOTA: Si necesitas cambiar la subnet por defecto de docker. Pon las siguientes líneas al final del archivo como se explica aqui:

{
        "registry-mirrors": [
                "https://docker.uclv.cu"
        ],
        "bip":"10.200.0.1/24",
	"default-address-pools":[
		{"base":"10.201.0.0/16","size":24},
		{"base":"10.202.0.0/16","size":24}
	]
}

Cada vez que ajuste el daemon.json debe reiniciar el servicio o hacer un reload

sudo service docker reload
o
sudo service docker restart

Probemos con la imagen hello-word

sudo docker run hello-world
o
sudo docker run docker.uclv.cu/hello-world

NOTA: Si desea asignar permisos a una cuenta no root para usar Docker haga lo siguiente:

sudo usermod -aG docker elusuarioquedeseasusarcondocker

Debo advertir que agregar un usuario al grupo docker le otorga la capacidad de ejecutar contenedores que se pueden usar para obtener privilegios de root en el host de Docker. Para conocer más del tema: Docker Daemon Attack Surface

Si desea hacer esta parte de forma desatendida les dejo este script:

#!/bin/bash

# cambiando source.list
echo "Cambiando source.list de archive.ubuntu.com a repos.uclv.edu.cu"

sudo sed -i 's/archive.ubuntu.com/repos.uclv.edu.cu/' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/repos.uclv.edu.cu/' /etc/apt/sources.list

# actualizando

sudo apt update && sudo apt upgrade -y

# Instalando docker docker-compose

sudo apt install docker.io docker-compose -y

# creando daemon.json

sudo bash -c 'cat << EOF > /etc/docker/daemon.json
{
        "registry-mirrors": [
                "https://docker.uclv.cu"
        ]
}
EOF'
sleep 10
# Reiniciando docker
echo "Reiniciando servicio docker"
sudo service docker restart

Docker Registry server:

Corresponde el turno para crear nuestro docker registry local. Alternativas para disponer de un registry hay varias tales como: Nexus, Harbor etc. Implementaremos registry oficial de Hub Network por los pocos recursos que usa. La imagen que usaremos implementa un docker registry HTTP API v2. Para nuestro proyecto crearemos una carpeta llamada registry.

mkdir registry
cd registry

Creamos el fichero docker-compose.yml y dentro agregamos:

nano docker-compose.yml

Y peguemos dentro:

version: '3.5'

services: 
     registry:
        image: docker.uclv.cu/registry:2.7.1
        container_name: registry
        networks:
            - hub_network
        restart: always
        ports: 
            - '5000:5000'
        volumes: 
            - ./registry-data:/var/lib/registry
            - ./config.yml:/etc/docker/registry/config.yml
        environment:
         REGISTRY_PROXY_REMOTEURL: "https://docker.uclv.cu"
         # Si navegas por proxy descomenta las líneas de abajo y pon la ip y puerto del proxy
         #HTTP_PROXY: ip:puerto
         #HTTPS_PROXY:  ip:puerto
         #NO_PROXY: localhost,127.0.0.1,10.0.0.7
         #no_proxy: localhost,127.0.0.1,10.0.0.7

networks:
  hub_network:
    driver: bridge

Nuestro docker compose hace referencia a config.yml el cual tendremos que crear

nano config.yml

Contendido:

version: 0.1

log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
delete:
  enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3


Levantamos el servicio:

sudo docker-compose up -d

Para usar tu nuevo servidor registry agrega esta líneas en daemon.json

nano /etc/docker/daemon.json

Agregar la final

{
        "registry-mirrors": ["http://registry:5000", "https://docker.uclv.cu"],
        "insecure-registries":["http://registry:5000", "https://docker.uclv.cu"]
}

Reiniciamos el servicio

sudo service docker restart

Para que el host pueda resolver el nombre del registry que asignamos debemos cargarlo al fichero /etc/hosts

nano /etc/hosts

Agregar:

tuipdelhost registry

Extra

Aprovecharemos e implementaremos 2 imágenes las cuales nos facilitaran la vida. La primera tiene que ver con la documentación de docker y la segunda con las imágenes y opciones que podemos usar. Como mencionamos en el titulo aprovecharemos todo lo que tenemos a nuestro alcance en la red de cuba.

Documentación de Docker

Puedes usar este recurso, el cual está libre de costo en https://docker-docs.uclv.cu. Tienes la opción de Implementarlo de una de las dos formas. Usando docker cli o corriendo docker-compose. Aprovecharemos y llamaremos la imagen desde nuestro registry local. Para que lo baje y nos lo deje guardado en él.

Desplegándola con docker cli

docker run -d -p 4000:4000 registry:5000/docs/docker.github.io

Desplegándola con docker-compose

Crearemos la carpeta para una mayor organización

mkdir docker_docs
cd docker_docs

Creamos el fichero docker-compose.yml

nano docker-compose.yml

Agregamos:

version: "3.7"

services:
    docker_docs:
        image: registry:5000/docs/docker.github.io
        container_name: docker_docs
        expose:
            - "4000"

Para levantarlo damos un simple

docker-compose up -d

Accedemos a él abriendo nuestro navegador http://ip:4000

Docsimagesdocker

Esta imagen está hecha para tener la ayuda completa de las imágenes oficiales de Docker desconectado; sus opciones, tag etc. Está pensada para usar por los miembros de la comunidad docker de cuba. Pues para acceder https://hub.docker.com/ es necesario usar vpn. Con esta imagen tendremos todo lo necesario desde la red de cuba.

Desplegándola con docker cli

docker run -d -p 8000:8000 registry:5000/linux8a/docsimagesdocker:v2.0.1

Desplegándola con docker-compose

mkdir documentacionimagenesdocker
cd documentacionimagenesdocker

Creamos el fichero docker-compose.yml

nano docker-compose.yml

Agregar:

version: '3.3'

services:
  documentacionimagenesdocker:
    image: registry:5000/linux8a/docsimagesdocker:v2.0.1 
    restart: always
    ports:
      - 8000:8000
    volumes:
      - /etc/localtime:/etc/localtime:ro  
      - /etc/timezone:/etc/timezone:ro

Accedemos a él abriendo nuestro navegador http://ip:8000

Conclusiones

Esto es una pequeña muestra de lo que podemos lograr para aprender y hacer crecer más a nuestra comunidad logrando aprovechar los recursos que tenemos en nuestra mano. Si deseas puedes implementar otros servicios https://github.com/linux8a/Docker-Cuba

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 52

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Alexander Rivas Alpizar 61 artículos
Administrador de Redes IDEAR Cienfuegos

19 comentarios

  1. Firefox 115.0 Firefox 115.0 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0

    como se hace con debian 11, please para instalar docker desde el repo de villa clara?

  2. Firefox 78.0 Firefox 78.0 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

    Luis. Los pasos de como tener una server registry de imágenes docker sencillo los mencionamos en el tutorial. No necesitas de VPN para bajarte las imagenes pues explicamos como montarlo usando como proxy remoto el recurso ed la universidad de las villas. Para usarlo por otros dentro de tu red. Es ajustar el daemon.json de las demás computadoras hacia el host donde tengas desplegado el registry y su puerto. Si quieres una UI te recomendaria Harbor pasate por su web https://goharbor.io/docs/2.3.0/install-config/demo-server/

  3. Microsoft Edge 100.0.1185.44 Microsoft Edge 100.0.1185.44 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.44

    Hola amigo, quisiera poder hacer un server de imágenes de docker para que sean descargadas o utilizadas por otros usuarios, no me quedó claro como poder lograr esto y si fuera posible un abiente gráfico web para gestionar las imágenes, ya que como saben estas cosas están prohibidas para cuba y no todos tienen una VPN y quisiera ayudar ya que por el momento tengo ese acceso. [email protected]

  4. Google Chrome 97.0.4692.71 Google Chrome 97.0.4692.71 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

    Saludos, alguna ayuda? Estoy dando mis primeros pasos con docker. Estoy atascado en este paso:
    $ sudo docker run docker.uclv.cu/hello-world
    docker: Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running `apparmor_parser apparmor_parser –version` failed with output:
    error: exec: «apparmor_parser»: executable file not found in $PATH.
    ERRO[0001] error waiting for container: context canceled

  5. Google Chrome 97.0.4692.71 Google Chrome 97.0.4692.71 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

    BD, muy buen material, necesito ayuda, al probar hello-world me sale esto. Llegué hasta este paso. Estoy en MX Linux 21. Gracias.

    $ sudo docker run hello-world
    docker: Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running `apparmor_parser apparmor_parser –version` failed with output:
    error: exec: «apparmor_parser»: executable file not found in $PATH.
    ERRO[0001] error waiting for container: context canceled

  6. Firefox 78.0 Firefox 78.0 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

    El comando correcto para bajar la imagen en cuestion es:
    docker pull docker.uclv.cu/ubuntu:latest
    De esa forma le estas diciendo a tu docker que baje la imagen desde ese mirror. Exitos

  7. Google Chrome 94.0.4606.71 Google Chrome 94.0.4606.71 Mac OS X  10.15.7 Mac OS X 10.15.7
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36

    Hola colegas. Estoy tratando de poner el repositorio de las Villas en mi Docker sobre todo para gastar de los megas .cu ?. Sin exito para mi.
    Salida de mi «docker info»

    ..
    ..
    HTTP Proxy: http.docker.internal:3128
    HTTPS Proxy: http.docker.internal:3128
    Registry: https://index.docker.io/v1/
    Labels:
    Experimental: false
    Insecure Registries:
    127.0.0.0/8
    Registry Mirrors:
    https://docker.uclv.cu/
    Live Restore Enabled: false

    Como pueden ver sale registrado en el «Registry Mirrors» el de las villas, pero al tratar de clonar una imagen basica de ubuntu obtengo este resultado:

    «Unable to find image ‘ubuntu:latest’ locally
    docker: Error response from daemon: Get «https://registry-1.docker.io/v2/»: Service Unavailable.»

    Sospecho que no esta tomando bien el Mirrors. Lo estoy haciendo en una Macbook, con BigSur.
    Saludos a todos

  8. Firefox 78.0 Firefox 78.0 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

    Hola, estoy siguiendo este toturial y se me para el paraguas aqui
    root@debian:/etc/docker/registry# docker-compose up -d
    Pulling registry (docker.uclv.cu/registry:2.7.1)…
    ERROR: Get https://docker.uclv.cu/v2/: dial tcp 181.225.254.4:443: connect: connection refused

    estoy sobre una MV en vBox, con Debian Buster

    • Firefox 78.0 Firefox 78.0 GNU/Linux x64 GNU/Linux x64
      Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

      Hola Sergio. Te recomendaria que revisaras y valides lo siguiente: 1- Que esa VM pueda resolver los dns y que con el comando curl o wget pueda acceder a internet. 2- Verificar si tu navegacion es por proxy. De ser asi debes seguir los pasos para pasarle el proxy al docker. 3- Verificar que en el fichero daemon.json este correcto el mirror del registry de uclv. 4-Una vez modificado el daemon.json deves reiniciar el servicio de docker. Nos dejas saber. Exitos!

  9. Google Chrome 92.0.4515.159 Google Chrome 92.0.4515.159 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36

    hola, estoy haciendo uso de este tuturial en una vm con ubuntu 20.04 y todo fluye bien, hasta que voy a registrar docker con el comando duso docker-compose up -d que me da el siguiente error:
    elio@ubuntu:/etc/docker/registry$ sudo docker-compose up -d
    Pulling registry (docker.uclv.cu/registry:2.7.1)…
    ERROR: Get https://docker.uclv.cu/v2/: dial tcp: lookup docker.uclv.cu: Temporary failure in name resolution

    Este sitio aun esta activo, porque me esta dando error en la resolucion del nombre.

    Me pueden ayudar.

    Saludos

    • Firefox 78.0 Firefox 78.0 GNU/Linux x64 GNU/Linux x64
      Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

      Hola Elio. Tienes que verificar los DNS de tu computadora. Pues el mismo error te esta informando de problemas con los dns. Verifica que tengas en windows los dns de etecsa. Puedes validar con la herramienta `dnslookup docker.uclv.cu` Si usas proxy para navegar y eres el administrador revisa los ajustes del proxy (squid dns_nameservers que este los de etecsa) Sino lo otro que puedes hacer es modificar el archivo host y fijar este valor asi `181.225.254.4 docker.uclv.cu` NOs comentas como te fue. Exitos.

  10. Firefox 90.0 Firefox 90.0 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0

    Gracias.Sigan publicando tutoriales como estos.

  11. Google Chrome 92.0.4515.107 Google Chrome 92.0.4515.107 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36

    El la configuración para docker_docs tampoco me funcionó pero cambié
    expose:
    – «4000»
    por
    ports:
    – «4000:4000»
    y todo como la seda

  12. Google Chrome 92.0.4515.107 Google Chrome 92.0.4515.107 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36

    Me fue de maravilla con el tutorial para montar docker para hacer algunas pruebas pero falle con el segundo contenedor.
    Tuve que hacerle unos cambios al docker-compose.yml debido a que tengo otros servicios corriendo a la vez y me quedó de esta manera:

    version: '3.3'

    services:
    docs_docker_images:
    image: registry:5000/linux8a/docsimagesdocker:v2.0.1
    restart: always
    ports:
    - 6000:8000
    volumes:
    - /etc/localtime:/etc/localtime:ro
    - /etc/timezone:/etc/timezone:ro

    Cuando hago un localhost:6000, el navegador no logra acceder al sitio

    Alguna idea??

    Gracias de antemano

    • Firefox 78.0 Firefox 78.0 GNU/Linux x64 GNU/Linux x64
      Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

      Arthanys89 una vez hagas docker-comopose up -d debes esperar unos minutos para que se cargue todas las ayudas de las imagenes.

      • Firefox 78.0 Firefox 78.0 GNU/Linux x64 GNU/Linux x64
        Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

        POdras ver el progreso con docker-compose logs veras un resultado en pantalla con algo asi.
        documentacionimagenesdocker_1_43ee0a7b0c92 | – xwiki/get-help.md
        documentacionimagenesdocker_1_43ee0a7b0c92 | – xwiki/issues.md
        documentacionimagenesdocker_1_43ee0a7b0c92 | – znc/variant-slim.mddocumentacionimagenesdocker_1_43ee0a7b0c92 | INFO – Documentation built in 426.71 seconds
        documentacionimagenesdocker_1_43ee0a7b0c92 | INFO – [18:14:53] Serving on http://0.0.0.0:8000/
        documentacionimagenesdocker_1_43ee0a7b0c92 | INFO – [18:16:32] Browser connected: https://docsimagenesoficiales.unixfree.org/alpine/index.html

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*