Intro
Últimamente he tenido que dar solución a una situación compleja y, de las alternativas, la mejor posicionada era el contenedor del tipo Docker. A pesar de que los servidores de explotación los tenemos sobre RHEL, utilizo algún Debian para hacer pruebas de concepto (creo que un día documentaré las razones para mantener una Debian para este tipo de pruebas por su facilidad) ...
Problema
En principio una instalación que parecía que iba a ser del tipo 'siguiente, siguiente' (si eso es realmente aplicable al mundo de la consola), se complicó (solo un poco) ya que el segmento de red donde Docker asigna la IP de las máquinas/aplicaciones que levanta COINCIDÍA con el segmento que usamos en la oficina para los PC de trabajo de la red interna, la 172.17.0.0/16 (Un post explicativo). Ya os imagináis, cuando le levanta el servicio docker se deja de ver el servidor a nivel de IP. Si le añadimos al hecho del cambio de Debian al Systemd (no sin ruido ...), hace que todas las soluciones en doc. existente no funcionara. Ahí están expuestas las razones para escribir el artículo.
Instalación
Se puede seguir la documentación del fabricante para la instalación sobre Debian:
https://docs.docker.com/engine/installation/linux/debian/
(La verdad es que hasta aquí es trivial)
Configuración
La solución pasa por modificar la red docker0 para que no sea la 172.17.0.0/16. Para ello (se ejecuta como root o mediante sudo):
Se edita el fichero /lib/systemd/system/docker.service
Se modifica la linea siguiente:
ExecStart=/usr/bin/docker daemon -H fd://
Por la siguiente:
ExecStart=/usr/bin/docker daemon -H fd:// --bip=192.168.133.1/24
systemctl daemon-reload
systemctl show docker --property ExecStart
(se verifica que aparezca la opción añadida)
systemctl restart docker
docker run hello-world
Se explican los comandos utilizados:
- La linea ExecStart del fichero /lib/systemd/system/docker.service: Como se puede deducir, corresponde a la linea executada por el Systemd en el momento de arrancar el servicio configurado.
- El parámetro --bip de la linea ExecStart: Asigna la IP del Ethernet Bridge docker0 creado por el servicio Docker. Se puede ampliar la documentación de esta operación en el doc.: https://docs.docker.com/engine/userguide/networking/default_network/custom-docker0/.
- systemctl daemon-reload: Recarga el system con las nuevas unidades o las modificaciones de las existentes
- systemctl show docker --property ExecStart: Verifica la propiedad ExecStart de la unidad docker.
- systemctl restart docker: Rearranca el servicio docker
- docker run hello-world: Arranca un contenedor de la imagen hello-word. En el siguiente enlace encontraréis más información sobre esta imagen: https://hub.docker.com/_/hello-world/
No hay comentarios:
Publicar un comentario