Hace tiempo que vengo mirando la tecnología de contenedores con interés, la verdad es que desde hace mucho tiempo el trabajo más ingrato, después de haber terminado un desarrollo, era configurar el servidor donde se iba a ejecutar finalmente. No basta con saber el sistema operativo, necesitas instalar una miriada de dependecias y de versiones de software que no siempre se encuentra en la versión que usaste para el desarrollo. Docker promete poder replicar entornos completos mediante una virtualización parcial y eso me parece muy, muy interesante.
Aunque no entraré al análisis profundo de cómo funciona docker, por el momento, si que veremos un ejemplo práctico de una tarea muy habitual como administrador de sistemas, configurar un servidor de correo con todos los servicios habituales. Para ello vamos a utilizar una máquina virtual (no sirve cualquiera, hay sistemas de virtualización que no se llevan bien con docker, en mi caso usé un VPS de OVH después de desechar otros dos de strato y webserver4you). Nuestra máquina virtual tiene un ubuntu 14.04… Al lío.
Lo primero que hay que hacer es instalar docker. Por suerte esto es bastante sencillo:
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list sudo apt-get update sudo apt-get install apt-transport-https ca-certificates sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual sudo apt-get install docker-engine
Con esto ya tendremos docker en la máquina. Podemos probarlo:
sudo service docker start sudo docker run hello-world
Si no queremos andar usando sudo para cada comando, añadiremos nuestro usuario al grupo de docker:
sudo groupadd docker sudo usermod -aG docker $USER
Ahora usaremos Poste.io como contenedor de nuestro servidor de correo. Es una solución simplemente completa y muy sencilla de instalar y configurar. En nuestro caso lo único que hay que hacer para ponerlo a funcionar es crear un directorio (en mi caso /home/mail/data) y ejecutar lo siguiente:
docker run \ -p 25:25 \ -p 81:80 \ -p 110:110 \ -p 143:143 \ -p 8443:443 \ -p 465:465 \ -p 587:587 \ -p 993:993 \ -p 995:995 \ -v /etc/localtime:/etc/localtime:ro \ -v /home/mail/data:/data \ -e "HTTPS=OFF" \ --name "mailserver" \ --restart=always \ -t analogic/poste.io
Lo más relevante en este caso es que NO queremos las redirecciones https porque vamos a configurar el servidor apache que ya tenemos para que actúe de proxy y será él quien tenga el https y los certificados y que el puerto que exponemos para la administración es el puerto 81 (redirigido al puerto 80 del contenedor).
Para que sea accesible desde el exterior por https lo que hicimos fue configurar un virtualhost en apache de esta manera:
<VirtualHost *:80> ServerName mail.midominio.es AssignUserId mailuser mailuser ServerAdmin [email protected] DocumentRoot /home/mailuser/www ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /home/mailuser/www> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ProxyPass / http://localhost:81/ RewriteEngine on RewriteCond %{SERVER_NAME} =mail.midominio.es RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </VirtualHost>
La configuración del https es similar, aunque yo dejé que el certbot de let’s encrypt me lo configurase automáticamente al generar los certificados, quedó una cosa como esta:
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName mail.midominio.es AssignUserId mailuser mailuser ServerAdmin [email protected] DocumentRoot /home/mailuser/www ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /home/mailuser/www> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ProxyPass / http://localhost:81/ SSLCertificateFile /etc/letsencrypt/live/mail.midominio.es/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/mail.midominio.es/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/mail.midominio.es/chain.pem </VirtualHost> </IfModule>
Si todo ha ido bien (seguro que algún detalle se nos pasa), tendremos el contenedor funcionando y podremos acceder al administrador de esta manera:
https://mail.midominio.es/admin/
Y, después de verificar la identidad y hacer los primeros ajustes de dominio, cuentas y demás podremos disfrutar de nuestro servidor de correo…

Hoy toca una entrada para alabar la tarea de nuestros trabajadores del conocimiento (eufemismo clase Dios) que son, como no, ninguneados e ignorados silenciosamente por el público en general y por sus jefes en particular. Pero esperad, antes de eso, un «mea culpa»… ¿Porqué los profesionales de la informática son tan despreciados en esta, una sociedad construida en base a su esfuerzo? Os diré mi opinión… Porque acostumbramos mal a nuestros clientes. Nos piden lo imposible y se lo damos, nos quejamos, nos revolvemos contra la ignoracia atrevida del que nos pide la luna pero finalmente cedemos y eso es lo que nos conduce inexorablemente a las mazmorras de nuestro propio talento.
Después de muchos meses trabajando en una aplicación que, por azares del destino, alguien decidió que se realizase en php utilizando como frontend 






