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
En este punto para levantar servicios tenemos dos opciones de funcionamiento:
* 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 prox...