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 ?