Podcast: Descargar (15.8MB)
El programa de hoy trata sobre cómo levantar servicios de docker en un servidor público que podéis contratar en cualquier lugar, por ejemplo en Neodigit, que es donde trabajo y donde os atenderán de maravilla.
El primer paso será instalar los requisitos previos para docker-ce que son:
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
Luego tendremos que añadir el repositorio con su llave previa e instalar docker-ce:
sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update sudo apt-get install docker-ce
Una vez instalado docker-ce en el servidor remoto configuraremos docker para que acepte conexiones desde fuera, para ello editaremos /lib/systemd/system/docker.service y modificaremos la siguiente línea:
ExecStart=/usr/bin/dockerd -H fd://
Por esta otra
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:4243
Tened cuidado porque esta parte de la configuración al usar docker-ce es diferente al antiguo docker.io pues ya no se edita más el /etc/default/docker y el puerto por defecto también cambia.
Ahora podemos configurar el firewall y las actualizaciones automáticas:
apt-get install iptables iptables -A INPUT -s x.x.x.x/32 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT mkdir /etc/iptables iptables-save > /etc/iptables/rules.v4 apt-get install iptables-persistent apt-get install unattended-upgrades dpkg-reconfigure --priority=low unattended-upgrades
donde x.x.x.x es vuestra IP, luego tendremos que ir añadiendo más servicios además del ssh en el puerto 22, como es el puerto 4243 que hemos utilizado para docker:
iptables -A INPUT -s x.x.x.x/32 -p tcp -m tcp --dport 4243 -m state --state NEW -j ACCEPT
Y después de cada iteración guardamos la configuración:
iptables-save > /etc/iptables/rules.v4
Aunque yo lo que suelo hacer a veces es editar el fichero de rules.v4 y luego hace un restore, en fin, para gustos colores.
En mi caso me voy a apoyar en portainer, del que ya hablé en el capítulo Podcast #86: Portainer y docker remoto y en el Podcast #61: Gestión de contenedores Docker con portainer. Ojo que el capítulo 86 está grabado con docker.io y este con docker.ce y es ahí donde están las diferencias comentadas antes.
En nuestro portainer añadiremos el endpoint correspondiente y ya podremos empezar a trabajar con ello.
Para instalar portainer en vuestro PC o donde queráis recordad que podéis ver las instrucciones en portainer.io, pero que de todos modos es algo tan sencillo como instalar docker y luego
docker volume create --name portainer_data docker run --restart=always -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data portainer/portainer
- Tenemos una IP pública por cada servicio.
- Tenemos un puerto diferente por cada servicio.
- Vamos compartiendo el puerto para varios servicios y utilizamos un balanceador o proxy.
La configuración de un proxy con nginx ya la comentamos en el Podcast #86: Portainer y docker remoto de este mismo podcast.
Por poner un ejemplo os dejo aquí la configuraicón de mi proxy http para que veáis como he montado el proxy para mi lector de feeds.
root@faa9c71eee55:/etc/nginx/conf.d# cat default.conf server { listen 80;#Puerto de escucha server_name rss.eduardocollado.com; #Nombre o IP de servidor location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; set $match "$1::$http_referer"; proxy_pass http://172.17.0.3; #ip privada y puerto si es distinto a 80 }
Enlace relacionado:
Colaboratorio: Redes en Docker: exposición de puertos
La música de hoy es de Kevin MacLeod y podéis descargarla de https://incompetech.com/