Primeros pasos con Docker tras un Proxy

Introducción

Hay millones de artículos explicando Docker, que son los contenedores y como hacerlos funcionar. En estos artículos el objetivo es hacer una pequeña guía de como realizar algunas tareas que tal vez no estén claras o requieran ejemplos para mejorar la comprensión.

Definir el Proxy para APT

En este ejemplo voy a instalar Docker en Ubuntu mediante el gestor de paquetes apt. El problema que tengo es que estoy tras un proxy y para ello necesito hacer algunos cambios previos. Sino estas tras un proxy no es necesario hacerlo.

He añadido el proxy con un simple echo al gestor de paquetes.

alberto@ansible-master:/$ echo "Acquire::http::Proxy "http://userproxy:passproxy@urlproxy:80" >> /etc/apt/apt.conf

Hacemos una simple verificación

alberto@ansible-master:/etc/apt$ cat apt.conf
Acquire::http::Proxy "http://userproxy:passproxy@urlproxy:80";

Instalar Docker

Lo primero es verificar que Docker no lo tenemos ya instalado. Para ello vamos a hacer un docker-run hello-world que lo que hace es cargar una imagen hola mundo y nos servirá para testear que Docker funciona correctamente.

alberto@ansible-master:~$ docker run hello-world
El programa «docker» no está instalado. Puede instalarlo escribiendo:
sudo apt install docker.io
alberto@ansible-master:~$

Como veis no lo tenemos instalado, ya nos sugiere el comando para instalarlo. Por tanto vamos a ello:

alberto@ansible-master:~$ sudo apt install docker.io
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes adicionales:
  bridge-utils cgroupfs-mount containerd runc ubuntu-fan
Paquetes sugeridos:
  mountall aufs-tools debootstrap docker-doc rinse zfs-fuse | zfsutils
Se instalarán los siguientes paquetes NUEVOS:
  bridge-utils cgroupfs-mount containerd docker.io runc ubuntu-fan
0 actualizados, 6 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Se necesita descargar 16,4 MB de archivos.
Se utilizarán 83,6 MB de espacio de disco adicional después de esta operación.
¿Desea continuar? [S/n]
Des:1 http://es.archive.ubuntu.com/ubuntu xenial/main amd64 bridge-utils amd64 1.5-9ubuntu1 [28,6 kB]
Des:2 http://es.archive.ubuntu.com/ubuntu xenial/universe amd64 cgroupfs-mount all 1.2 [4.970 B]
Des:3 http://es.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 runc amd64 1.0.0~rc2-0ubuntu2~16.04.1 [1.476 kB]
Des:4 http://es.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 containerd amd64 0.2.5-0ubuntu1~16.04.1 [4.041 kB]
Des:5 http://es.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 docker.io amd64 1.12.6-0ubuntu1~16.04.1 [10,8 MB]
Des:6 http://es.archive.ubuntu.com/ubuntu xenial-updates/main amd64 ubuntu-fan all 0.9.2 [30,7 kB]
Descargados 16,4 MB en 11s (1.469 kB/s)
Seleccionando el paquete bridge-utils previamente no seleccionado.
(Leyendo la base de datos ... 117333 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../bridge-utils_1.5-9ubuntu1_amd64.deb ...
Desempaquetando bridge-utils (1.5-9ubuntu1) ...
Seleccionando el paquete cgroupfs-mount previamente no seleccionado.
Preparando para desempaquetar .../cgroupfs-mount_1.2_all.deb ...
Desempaquetando cgroupfs-mount (1.2) ...
Seleccionando el paquete runc previamente no seleccionado.
Preparando para desempaquetar .../runc_1.0.0~rc2-0ubuntu2~16.04.1_amd64.deb ...
Desempaquetando runc (1.0.0~rc2-0ubuntu2~16.04.1) ...
Seleccionando el paquete containerd previamente no seleccionado.
Preparando para desempaquetar .../containerd_0.2.5-0ubuntu1~16.04.1_amd64.deb ...
Desempaquetando containerd (0.2.5-0ubuntu1~16.04.1) ...
Seleccionando el paquete docker.io previamente no seleccionado.
Preparando para desempaquetar .../docker.io_1.12.6-0ubuntu1~16.04.1_amd64.deb ...
Desempaquetando docker.io (1.12.6-0ubuntu1~16.04.1) ...
Seleccionando el paquete ubuntu-fan previamente no seleccionado.
Preparando para desempaquetar .../ubuntu-fan_0.9.2_all.deb ...
Desempaquetando ubuntu-fan (0.9.2) ...
Procesando disparadores para man-db (2.7.5-1) ...
Procesando disparadores para ureadahead (0.100.0-19) ...
Procesando disparadores para systemd (229-4ubuntu16) ...
Configurando bridge-utils (1.5-9ubuntu1) ...
Configurando cgroupfs-mount (1.2) ...
Configurando runc (1.0.0~rc2-0ubuntu2~16.04.1) ...
Configurando containerd (0.2.5-0ubuntu1~16.04.1) ...
Configurando docker.io (1.12.6-0ubuntu1~16.04.1) ...
Añadiendo el grupo `docker' (GID 120) ...
Hecho.
Configurando ubuntu-fan (0.9.2) ...
Procesando disparadores para systemd (229-4ubuntu16) ...
Procesando disparadores para ureadahead (0.100.0-19) ...

Bien, ya tenemos docker instalado pero dado que no queremos ejecutar las cosas como root, vamos a añadir nuestro usuario al grupo docker:

alberto@ansible-master:~$ sudo usermod -aG docker $(whoami)

Volvemos a cargar nuestro comando docker run hello-world

alberto@ansible-master:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository docker.io/library/hello-world
docker: Error while pulling image: Get https://index.docker.io/v1/repositories/library/hello-world/images: dial tcp: lookup index.docker.io on 10.70.219.100:53: no such host.

Bien, como vemos tenemos un problema de conexión y es debido nuevamente al proxy. Tenemos que definir el proxy para Docker antes de poder continuar.

Definir el Proxy en Docker

Para ello creamos esta carpeta:

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

Dentro de la carpeta creamos un fichero http-proxy.conf con los siguientes datos

alberto@ansible-master:~% cat /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://userproxy:passproxy@urlproxy:80"

Relanzamos para que lo tome en cuenta

sudo systemctl daemon-reload
sudo systemctl restart docker

Verificamos que esta cargado el proxy en la configuración:

$ sudo systemctl show --property Environment docker
Environment=HTTP_PROXY=http://userproxy:passproxy@urlproxy:80/

 

Ejecutando nuestro primer contenedor

alberto@ansible-master:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
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.
 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://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

 


So, what do you think ?