Cuando queremos desplegar un proyecto web, acudimos a instalar un servidor de páginas web que nos permita alojar dicho proyecto (para nuestro caso de hoy un servidor con Apache). Existen varios servidores de este tipo, no vamos a enumerarlos todos, pero los mas conocidos son Apache, Nginx e IIS de Microsoft.
Apache y Nginx son multiplataforma y de código abierto mientras que el servidor IIS de Microsoft lo tenemos de forma privativa y para Windows.
Ahora bien, cuando queremos “trasladar” nuestro proyecto para llevarlo a un ordenador ajeno, aparte del código del proyecto, debemos tener ademas el servidor de páginas web configurado, con el quebradero que ademas puede surgir con las versiones instaladas, la posible configuración que tenga, etc…
Ya muy posiblemente estemos pensando en virtualizar una máquina para transportar el código con el servidor instalado y configurado, pero virtualizar una máquina implica tener instalado en el mismo un sistema operativo completo y eso reduce considerablemente el rendimiento y aparte el tamaño del proyecto se incrementa enormemente.
La idea de Docker es la de empaquetar el mínimo software necesario para su funcionamiento. Estamos hablando de que para Apache será necesario (aparte de todos los componentes que integran la aplicación, librerias, etc…) un sistema operativo liviano (Alpine Linux es un conocido que ocupa unos 5 megas aprox.) con todo lo necesario de modo que la aplicación pueda ser lanzada sin problema.
A estos paquetes se los llama contenedores y se pueden lanzar multiples contenedores de Apache simultáneamente sin ver recaer demasiado el rendimiento de la máquina.
En el caso de tener varios contenedores con un contenido similar, el espacio usado en común no se duplica en espacio de disco duro.
Con Docker ademas podemos lanzar varias versiones de un servicio y a la misma vez, pudiendo desplegar tu proyecto y actualizarlo con un pequeño cambio.
Además de “trasladar” el proyecto, con Docker podemos instalar un sistema operativo configurado con algún servicio rápidamente (vsftpd, httpd, oracle, mysql, python, postgres, nginx, mongo, mariadb, wordpress, tomcat, etc… incluso sistemas operativos como Ubuntu, Debian, Fedora, y un largo etc…)
Instalación de Docker
Instalación Docker desde Linux basado en Debian
Para instalar Docker en una máquina Linux, recurrimos a la terminal de comandos actualizando primeramente el listado de repositorios del sistema con:
# sudo apt update
Instalamos los paquetes previos necesarios para permitir a apt descargar a través de HTTPS:
# sudo apt install apt-transport-https ca-certificates curl software-properties-common
Añadimos la clave del repositorio oficial de Docker:
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
Y además añadimos al listado de repositorios del sistema, la url del repositorio que Docker:
# sudo add-apt-repository «deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable»
Actualizamos nuevamente el contenido de los repositorios del sistema que ahora ya incluye a Docker:
sudo apt update
Y finalmente instalamos Docker:
sudo apt install docker-ce
Instalación Docker desde Windows
Desde Windows es algo más sencillo, tan solo dirigirse a la siguiente url con el navegador web https://docs.docker.com/desktop/windows/install/ , descargarse Docker Desktop for Windows y ejecutarlo.
Realizamos una comprobación para ver si está funcionando correctamente, verificando la versión de Docker instalado en el equipo (en común tanto para Linux como para Windows):
docker -v
Y realizamos otra pequeña prueba del funcionamiento de Docker descargando y ejecutando una aplicación escrita en C con un hello-world:
docker run hello-world
Visto el correcto funcionamiento de Docker, procedemos ahora sí a la descarga e instalación de httpd (que así es como se llama Apache en DockerHub) a su última versión disponible:
docker run -p 8080:80 httpd
El comando ejecutado docker run -p 8080:80 httpd descargará la imagen de Apache, –p sirve para redireccionar el puerto físco 8080 por el 80 de la imagen del contenedor de Apache y httpd es el nombre del contenedor a descargar:
Para comprobar que Apache esta funcionando tan sólo tenemos que abrir un navegador web y probar con localhost:8080
Para lanzarlo como un demonio (un servicio) lo hacemos añadiendo un -d
docker run -d -p 8080:80 httpd
Ahora para acceder al directorio /htdocs del contenedor lo haríamos con:
docker exec –ti 9db /bin/bash
Siendo 9db los tres primeros caracteres devueltos en la screen anterior con la id del demonio generado (es un numero aleatorio)
Accedemos a la carpeta htdocs y vemos el archivo index.html
Así mismo podemos acceder a la configuración de Apache en /etc/apache2