En este tutorial voy a enseñaros cómo desplegar un servidor web en pocos segundos utilizando Docker + Docker Compose.
Docker Compose sirve para ejecutar distintos contenedores Docker, en este ejemplo podríamos utilizar solo un archivo Docker para desplegar Apache2 pero lo vamos a tomar de base para completar nuestro ejemplo con más contenedores, por lo que utilizaremos Docker Compose.
Para empezar vamos a instalar Docker en nuestra máquina, en este caso un Ubuntu.
Instalamos Docker Compose en Ubuntu siguiendo las instruciones de la web oficial de Docker
Actualizamos dependencias e instalamos nuevos paquetes necesarios
sudo apt-get update
Instalamos dependencias necesarias
sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
Añadimos la clave GPG oficial de Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Añadimos el repositorio estable de Docker
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Actualizamos nuestros respositorios
sudo apt-get update
Instalamos Docker y Docker Compose
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Ahora comprobamos que Docker funciona ejecutando el hello-world de ejemplo
sudo docker run hello-world
Si devuelve error de Docker
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. See 'docker run --help'.
Tendremos que levantar el servicio de forma manual con el siguiente comando
sudo service docker start
Y probar de nuevo a ejecutar el Hello-World
Para no tener que usar el comando sudo al invocar docker:
- Crear grupo docker
sudo groupadd docker
2. Añadir al usuario al grupo docker:
sudo usermod -aG docker $USER
3. Guardar los cambios del grupo:
newgrp docker
4. Ya puedes usar docker sin sudo
docker run hello-world
Ahora vamos a crear una nueva carpeta dónde añadiremos nuestro fichero de Docker Compose.
Una vez creado el directorio, creamos un archivo que se tiene que llamar docker-compose.yml
Vamos a instalar una versión de Apache2 que ya tiene incluido además PHP, esa versión es la php:7.0-apache.
Creamos el siguiente archivo qué explico en los comentarios:
version: "3" #Indicamos la version docker compose que utilizamos #Y luego los servicios que vamos a implementar services: #Aquí indicamos el nombre que queramos mi_servicio_apache: #Imagen de APACHE con PHP image: php:7.0-apache container_name: apache-container volumes: #Carpeta donde guardaremos los archivos web : carpeta interna de Docker - ./www/:/var/www/html expose: #Puerto que queremos exponer a para poder compartirlo con otros contenedores - 80 ports: # Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL) - 80:80
Es importante mantener bien la tabulación de los espacios del documento, ya que se basa en lenguaje YALM
Con este código queda creado nuestro contenedor Docker.
Utilizamos la imagen oficial php:7.0-apache
Nota: los puertos funcionan de la siguiente manera
- PUERTO_MAQUINA : PUERTO DOCKER
Añadimos nombre al contenedor con la línea de container_name: apache-container
en este caso lo llamamos apache-container.
Con la etiqueta volumes, indicamos dónde queremos alojar los archivos web. Esto se puede entender cómo un acceso directo o carpeta compartida entre nuestra máquina y el contenedor Docker. Sigue la siguiente estructura:
- ./www/:/var/www/html –> CARPETA_NUESTRA_MAQUINA:CARPETA_INTERNA_CONTENEDOR
Esto quiere decir que tenemos que crear una carpeta en el mismo directorio dónde hemos creado ejemplo.yml
Aquí dentro podemos crear una web index.html y añadirla dentro de la carpeta www.
Como la siguiente:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>Document</title> <meta name="keywords" content=""/> <meta name="description" content=""/> <meta name="viewport" content="width=device-width"/> </head> <body> Ejemplo de <a href="https://devcodelight.com">DevCodeLight</a> </body> </html>
Quedaría entonces www/index.html
Ahora ya podemos ejecutar nuestro ejemplo con el siguiente comando:
docker compose up -d
*Si docker-compose no funciona, hay que volver a instalar Docker Compose ejecutando estos comandos:
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version
Ahora tendria que devolver la versión de docker-compose:
Este comando levanta nuestro Docker Compose en segundo plano, la primera vez va a tardar un rato mientras descarga la imagen y la configura.
Comienza a descargar las dependencias y contenedor:
Una vez descargada ya estaría desplegado.
Para comprobar que funciona correctamente ponemos en nuestro navegador: http://localhost
Y ya tenemos nuestro pequeño contenedor desplegado. Recuerda qué si queremos mostrar una página web que hayamos desarrollado, tendremos que añadir los archivos en la carpeta www que tenemos en raíz de nuestro proyecto.
Aquí os dejo el código de este tutorial disponible en mi GitHub para que podáis utilizarlo.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.
10 comentarios en «Instalar Docker en Ubuntu y desplegar servidor web Apache con PHP utilizando Docker Compose»