Docker a lo cubano

Este singular título se me ocurre debido a los trabajos que pasamos los cubanos al querer usar los servicios de Docker. Aunque ya existe un tutorial de nuestro colega @Koratsuki este incluye el uso de una VPS y saltarse las restricciones. En este tutorial pretendo que todo el proceso se haga usando espejos alternativos tanto para la instalación de Docker como para las descargas de las imágenes. Bueno comenzaremos con los requisitos que necesitamos:

1- Una conexión a internet (en este tutorial también les mostrare todo el proceso si estas detrás de un proxy padre)

2- Un PC con una distro Linux (Debian o Ubuntu) Nota: También se puede lograr virtualizado en un VM.

3- Conocimientos básicos y deseos de aprender.

Instalamos la distro de nuestra preferencia y seguido procedemos a modificar nuestro sources.list para agregar los repositorios alternos de Docker.

nano /etc/apt/sources.list
[Ubuntu]
Agregamos:
deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable
Alterno:
deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu bionic stable

[Debian}
Agregamos:
deb [arch=amd64] https://download.docker.com/linux/debian buster stable
Alterno:
deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian buster stable

Ahora les muestro como agregar las llaves del repositorio que lo pida.

[Ubuntu]
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
Alterno:
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | apt-key add -
[Debian]
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
Alterno:
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | apt-key add -

Finalmente actualizamos nuestro sistema:

apt update
apt upgrade

No es objetivo de este tutorial mostrarles como configurarle un proxy a los diferentes comandos que se usan aquí. Puede verlo en otros posts de este mismo Blog. Aquí solo les mostrare como usarlo con Docker. Una vez ya nuestro sistema totalmente actualizado, procedemos a instalar las dependencias necesarias para que corra Docker en nuestro sistema.

[Debian][Ubuntu]
apt install apparmor-utils apt-transport-https avahi-daemon jq network-manager socat qrencode
Instalar estos, aunque ya los tenga para asegurarse
apt install curl net-tools ca-certificates software-properties-common dbus

Finalmente instalamos docker

apt install docker-ce docker-compose docker-ce-cli containerd.io

Ahora con nuestro docker ya instalado solo nos queda configurarlo para que use un mirror diferente al de dockerhub y así poder bajar las imágenes sin restricciones.

Crear en /etc/docker/ el fichero daemon.json
 
nano /etc/docker/daemon.json

Agregar el siguiente contenido.

{ 
    "registry-mirrors": [ 
    "https://rw21enj1.mirror.aliyuncs.com",
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://1nj0zren.mirror.aliyuncs.com",
    "https://quay.io",
    "https://docker.mirrors.ustc.edu.cn",
    "http://f1361db2.m.daocloud.io",
    "https://registry.docker-cn.com"
    ]
}

Si desea agregar un registro de mirror inseguro aquí les dejo el enlace de cómo hacerlo. Reinciamos para que se vean los cambios.

systemctl daemon-reload 
systemctl restart docker

Este paso a continuación es para aquellos que estas detras de un proxy padre y es opcional.

Crear la carpeta docker.service.d

mkdir -p /etc/systemd/system/docker.service.d

Creamos el fichero http-proxy.conf

nano /etc/systemd/system/docker.service.d/http-proxy.conf

Dentro agregamos:
[Service]
Environment="HTTP_PROXY=http://user:password@proxyip:port/"
Environment="HTTPS_PROXY=http://user:password@proxyip:port/"
Environment="NO_PROXY= hostname.example.com,localhost,127.0.0.1"

Recargamos la config y reinciamos el servicio:

systemctl daemon-reload
systemctl restart docker

Ahora comprobaremos que todo está bien.

Usaremos el comando:
docker info

Nos dará una salida similar a la siguiente:

Client:
 Debug Mode: false

Server:
 Containers: 1
  Running: 1
  Paused: 0
  Stopped: 0
 Images: 2
 Server Version: 19.03.8
 Storage Driver: overlay2
  Backing Filesystem: <unknown>
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 4.15.0-96-generic
 Operating System: Ubuntu 18.04.4 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 1.946GiB
 Name: hassio
 ID: RHYE:4WP5:KGF3:35WJ:RSQL:5VTF:IX33:6NOI:N24W:OAJM:4UNP:LHVE
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http://proxyip:port/
 No Proxy: localhost,127.0.0.1
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://rw21enj1.mirror.aliyuncs.com/
  https://dockerhub.azk8s.cn/
  https://reg-mirror.qiniu.com/
  https://hub-mirror.c.163.com/
  https://docker.mirrors.ustc.edu.cn/
 Live Restore Enabled: false

WARNING: No swap limit support

Aquí solo deben fijarse si les reconoce el proxy(si se lo pusieron) y los mirrors alternos(Registry Mirrors).

Ahora vamos a comprobar si funcionan los registros alternos de mirror:

Corremos el siguiente comando:
docker run hello-world

Nos mostrara la siguiente salida, donde notamos que como la imagen hello-world aun 
no está descargada (por eso no la encuentra localmente) procede a bajarla de uno de nuestros mirrors alternos

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Ahora ya podemos bajar la imagen que necesitemos sin tener que leer el siguiente cartel:

Ahora como plus les mostrare como instalar portainer usando docker compose.

Como ya habíamos instalado docker-compose, crearemos el archivo docker-compose.yml en el que configuraremos el contenedor de portainer.

nano docker-compose.yml

Podemos crearlo en el directorio que queramos, yo lo he hecho en /etc/docker En su interior pondremos lo siguiente:

version: '3'

services:
  portainer:
    image: portainer/portainer
    restart: always
    ports:
      - "9000:9000"
    command: -H unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

volumes:
  portainer_data:

Con el archivo creado ejecutamos el comando docker-compose up -d lo que descargará el paquete de los mirrors alternos, creará el contendor y lo ejecutará.

docker-compose up -d

Una vez terminado, y si todo ha ido bien, al poner en un navegador http://ip_docker:9000 deberíamos ver la interfaz de Portainer. 
Nos pedirá que creemos una contraseña para el usuario admin, la creamos y accedemos al Dashboard.

Les muestro a continuación algunos comandos útiles de Docker que deben conocer.

Corre una imagen de docker
docker run
Mostrar los container que están corriendo
docker ps
Mostrar las imágenes descargadas
docker images
Mostar información de la configuración de Docker
docker info
Traer una imagen
docker pull
Etiquetar una imagen
docker tag

Mi intención no es mostrarle como trabajar con Docker sino como usarlo en cuba. Este tutorial se ira enriqueciendo a medida que me ayuden los colegas @Koratsuki y @aldrockhavana

Espero les sirva a todos.

¿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: 68

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

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

21 comentarios

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

    Después de Debian 12 y Ubuntu 22.04 el comando apt-key está deprecado. Como se añadiría la llave para estos repositorios?

    Saludos.


  2. Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
    Firefox 125.0 Firefox 125.0 Ubuntu x64 Ubuntu x64
    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0

    Traceback (most recent call last):
    File «/usr/bin/docker-compose», line 33, in
    sys.exit(load_entry_point(‘docker-compose==1.29.2’, ‘console_scripts’, ‘docker-compose’)())
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «/usr/bin/docker-compose», line 25, in importlib_load_entry_point
    return next(matches).load()
    ^^^^^^^^^^^^^^^^^^^^
    File «/usr/lib/python3.12/importlib/metadata/__init__.py», line 205, in load
    module = import_module(match.group(‘module’))
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «/usr/lib/python3.12/importlib/__init__.py», line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File «», line 1387, in _gcd_import
    File «», line 1360, in _find_and_load
    File «», line 1331, in _find_and_load_unlocked
    File «», line 935, in _load_unlocked
    File «», line 995, in exec_module
    File «», line 488, in _call_with_frames_removed
    File «/usr/lib/python3/dist-packages/compose/cli/main.py», line 9, in
    from distutils.spawn import find_executable
    ModuleNotFoundError: No module named ‘distutils’

    ayuda con esto por favor


  3. Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
    Firefox 125.0 Firefox 125.0 Ubuntu x64 Ubuntu x64
    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0

    Hola buenas tardes m podrian ayudar a instalar el ecosistema,es q m esta dando error,muchos errores

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

    Hace un tiempo use este tutorial y me funciono sin problema, pero hoy trate de usarlo de nuevo y me sale este error:

    docker: Error response from daemon: pull access denied for hello-word, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied.
    See ‘docker run –help’.

  5. Google Chrome 94.0.4606.61 Google Chrome 94.0.4606.61 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.61 Safari/537.36

    Hola buenas. Muy bueno el contenido porque me lo han recomendado mucho. Lo han probado en MacOS?

  6. Firefox 89.0 Firefox 89.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0

    Hermano
    Lo siento no puedo darte una puntuacion de 5 por que cuando uno se decide a hacer un tutorial para mostrar o enseñar algo no debe cometer tantos errores como lo que haz cometido en segundo lugar omites muchos pasos y das por hecho que tus seguidores se la saben todas, y no todas las personas que leen esta página son expertos como Ud, debes de pensar en un publico mas amplio para que puedas llegar a más personas
    De veras que lo siento pero es un desastre hermano que debes tener en cuenta para tu proximo POSS

    • Firefox 89.0 Firefox 89.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0

      En primera para su informacion, no hago los tutoriales para que me den puntuacion asi q no te preocupes por eso. No gano nada con hacerlos, solo doy mi conocimiento. En segunda tu comentario no aporta nada pq hablas de tantos errores , pero no mencionas ninguno en concreto asi q presumo q ni tienes ideas de que hablas. En 3ra siempre he presumido de q mis tutoriales estan a nivel de gente inexperta, no obstante este es un blog de sysadmins q busca promover el conocimiento es evidente que para crear un tutorial yo no lo hare la historia del docker, el q no sepa q es q se lo estudie.
      Y ya para rematar…esto es un POST no se q rayos es POSS. Cuando se tiene el valor de escribir tanta incongruencia junta al menos hazlo bien. Para llamarte CLARo..no lo tienes bien claro.

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

        de todas las respuestas esta es la mas acertada!… que atrevida puede llegar a ser la ignorancia… sobre todo con un teclado!

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

    Hola, muchas gracias por este tutorial. Instalé Docker siguiendo las instrucciones, pero al ejecutar «docker search debian» la consola me muestra «Error response from daemon: Unexpected status code 403». ¿Qué pudiera ser? Gracias nuevamente y excelente día.

    • Firefox 89.0 Firefox 89.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0

      Hola tocayo, es facil..el error 403 es un error de prohibicion. Como sabes docker esta prohibido para cuba. Tienes q tratar de poner repositorios q no estan cerrados. Prueba con adicionar el que dan arriba de la UCLV. Haz busqueda en google veras q hay otros mas.
      alex out

  8. Firefox 80.0 Firefox 80.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0

    Hola
    El registro https://docker.uclv.cu creo que pueden adicionarlo. Tiene buena disponibilidad y es libre de costo cuando se accede por wifi-nauta o nauta-hogar.
    Saludos

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

    Gracias probe paso a paso lo que explica y me sirvio puede hasta hacer la instalación del portainer.Ahora me gustaría poder utilizar portainer para descargar nuevas imagenes como configurarlo.
    Tu tutorial me fue de mucha utilidad

    • Firefox 77.0 Firefox 77.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0

      igualmente,quisiera aprender a usar portainer pues al final lo que hago con portainer es eliminar container o imagenes por hacer algo, y todo lo demas por consola, ojala hicieran un cursito de como usar portainer


  10. Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
    Firefox 77.0 Firefox 77.0 Ubuntu x64 Ubuntu x64
    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0

    Hola, a la hora hechale una ojeada a esto:
    –2020-06-11 00:30:48– https://storage.googleapis.com/golang/go1.12.1.linux-amd64.tar.gz
    Resolving storage.googleapis.com (storage.googleapis.com)… 172.217.3.80, 2607:f8b0:4008:80e::2010
    Connecting to storage.googleapis.com (storage.googleapis.com)|172.217.3.80|:443… connected.
    HTTP request sent, awaiting response… 403 Forbidden
    2020-06-11 00:30:49 ERROR 403: Forbidden.

    ERROR: Service ‘btc’ failed to build: The command ‘/bin/sh -c apt-get update && apt-get -y install wget git && wget https://storage.googleapis.com/golang/go1.12.1.linux-amd64.tar.gz && tar -xvf go1.12.1.linux-amd64.tar.gz && mv go /usr/local’ returned a non-zero code: 8


    • Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
      Firefox 77.0 Firefox 77.0 Ubuntu x64 Ubuntu x64
      Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0

      Bueno, si a alguien le pasara lo que a mí, pude solucionarlo de esta forma:
      1. Habra un terminal ubicado en la carpeta del proyecto y ejecute esto «`sed -i «s+https://storage.googleapis.com/golang/+https://mirrors.nju.edu.cn/golang/+g» .docker/viabtc/btc/Dockerfile;head -15 .docker/viabtc/btc/Dockerfile«`
      2. Luego ejecute nuevamente dentro de la carpeta de su proyecto: «docker-compose up -d«
      3. Listo, todo debe correr corréctamente

    • Firefox 76.0 Firefox 76.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

      Si la de los iranies es muy buena, pero como puedes ver lleva otro procedimiento hay q ponerlo como proxy y salir por el. De esta forma puedo agregar mas mirrors

    • Firefox 74.0 Firefox 74.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0

      Ya lo arregle y puse los alternos tambien para el que no acceda a download.docker.com


  11. Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
    Firefox 75.0 Firefox 75.0 Ubuntu x64 Ubuntu x64
    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0

    Creo que en el paso «Crear en /etc/docker/ el fichero daemon.json…» faltan comas detrás de algunas líneas.

    • Opera 64.0.3417.172 Opera 64.0.3417.172 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 OPR/64.0.3417.172

      Ya arregaldo, es que habia sumado mas mirror y olvide eso..
      gracias
      alex out

Dejar una contestacion

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


*