En este artículo vamos a ver de forma práctica cómo instalar un entorno Wordpress con Docker Compose. Con esta rápida instalación podremos clonar sitios Wordpress y crear un entorno de desarrollo (o producción si lo deseamos) para aquellos programadores e implementadores de Wordpress.

Si no sabes que es Docker te recomiendo leas nuestro artículo: Docker, Qué es y sus principales características .

Vamos a ir explicando el paso a paso hasta conseguir un sitio Wordpress completamente funcional en una máquina local con sistema operativo Ubuntu 16.04 (si necesitáis la explicación para otras distribuciones indicádnoslo en los comentarios). También te recomiendo que heches un vistazo a nuestro Curso de Docker o al Curso de Docker Swarm, Kubernetes y CoreOS Fleet si eres un usuario más avanzado, ambos impartidos por ingenieros de Docker INC. .

Instalación de Docker en Ubuntu 16.04

Actualizamos los origenes de los paquetes de APT

Docker proporciona un repositorio APT para Ubuntu 16.04 con la versión 1.7.1 de Docker y superiores. Tendremos que indicar a APT a usar los paquetes del repositorio oficial de Docker:

  1. Abrirmos una terminal.

  2. Actualizamos nuestra lista de paquetes APT y nos aseguramos de que estamos usando el método Https y tenemos los certificados CA instalados:

     $ sudo apt-get update
     $ sudo apt-get install apt-transport-https ca-certificates
    
  3. Añadimos la nueva clave GPG :

    $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    
  4. Abrimos el fichero /etc/apt/sources.list.d/docker.list con nuestro editor de texto favorito. Si no existe, debemos crearlo. Esto deberemos realizarlo con privilegios de administrador o root.

  5. Dejamos limpio el fichero.

  6. Añadimos la siguiente linea para Ubuntu 16.04:

    deb https://apt.dockerproject.org/repo ubuntu-xenial main
    
  7. Guardamos y cerramos el fichero /etc/apt/sources.list.d/docker.list .

  8. Actualizamos el índice de paquetes de APT.

    $ sudo apt-get update
    
  9. Purgamos el viejo repositorio si existiese:

    $ sudo apt-get purge lxc-docker
    
  10. Verificamos que APT instalará el paquete desde el repositorio correcto:

    $ apt-cache policy docker-engine
    

Instalación de Docker

Una vez tenemos actualizado APT es hora de instalar Docker.

  1. Instalación de Docker:

    $ sudo apt-get install docker-engine
    
  2. Arrancamos el demonio de Docker:

    $ sudo service docker start
    
  3. Verificamos que docker está instalado correctamente:

    $ sudo docker run hello-world
    

    Este comando descargará una imagen de test de docker y la iniciará en un contenedor. Cuando se inicie el contenedor mostrará un mensaje informativo y posteriormente se cerrará.

No vamos a entrar en otras configuraciones más avanzadas de Docker para que este artículo quede lo más sencillo y práctico posible. Para más información acerca de la[instalación de Docker puedes dirigirte a su documentación oficial .

Instalación de Docker Compose en Ubuntu 16.04

Docker Compose es una herramienta para administrar aplicaciones Docker basadas en multiples contenedores. Con Docker Compose podremos clonar, crear, eliminar, y arrancar sitios Wordpress.

Para instalar Docker Compose necesitaremos la herramienta curl instalada en el sistema, si no disponemos de ella la instalamos con:

$ sudo apt-get install curl

Ahora ya podremos instalar docker-compose :

  1. Instalación de Docker Compose con un solo comando como superusuario:

    $ sudo -i
    # curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    # exit
    
  2. Damos permisos de ejecución al binario:

    $ sudo chmod +x /usr/local/bin/docker-compose
    
  3. Testeamos la instalación:

    $ sudo docker-compose --version
    docker-compose version 1.8.0, build f3628c7
    

Opcionalmente podemos instalar el autocompletado de docker-compose para bash :

$ sudo -i
# curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
# exit

Configuración de Permisos

Hasta el momento debíamos iniciar docker con permisos de superusuario ( sudo o root ). Ahora vamos a configurar los permisos para que nuestro usuario pueda ejecutar el demonio de Docker y hacer uso de docker-compose .

Para evitar tener que usar sudo cuando se utiliza el comando docker , debemos crear un grupo de Unix llamado docker y añadir usuarios al mismo. Cuando se inicie el demonio docker , el socket de Unix pasará a ser propiedad del grupo docker con permisos de Lectura/Escritura. Comencemos:

  1. Entramos a Ubuntu con un usuario con privilegios de sudo .
  2. Creamos el grupo docker :
    $ sudo groupadd docker
    
  3. Añadimos nuestro usuario al grupo docker :
    $ sudo usermod -aG docker $USER
    
  4. Cerramos nuestras sesión y la iniciamos nuevamente. Esto nos asegura que nuestro usuario esta iniciado con los permisos correctos.
  5. Verificamos que funciona correctamente iniciado docker sin el uso de sudo :
    $ docker run hello-world
    
    Si falla veremos un mensaje similar al siguiente:
    Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
    
    Comprueba que la variable de entorno DOCKER_HOST no está inicializada en tu shell . Si lo está, bórrala.

En este punto ya tenemos el sistema listo para trabajar con docker y docker-compose .

Wordpress con Docker Compose

Con Docker Compose podemos iniciar fácilmente WordPRess en un entorno aíslado contruido mediante contenedores Docker.

Definiendo el proyecto

  1. Creamos un directorio vacío para nuestro proyecto. Este directorio podrá tener el nombre que nosotros queramos y aquí se encontrarán los recursos necesarios para construir la imagen. En el directorio del proyecto deberemos tener un fichero llamado docker-compose.yml que será el encargado de tener la definido nuestros contenedores. En mi caso crearé el directorio llamado wordpress-wptesteando :
    $ cd ~
    $ mkdir wordpress-wptesteando
    
  2. Entramos al directorio del proyecto:
    $ cd wordpress-wptesteando
    
  3. Creamos el fichero docker-compose.yml que contendrá la definición de nuestro proyecto. Nos basaremos en dos instancias separadas: Una instancia para Wordpress y otra instancia separada para MySQL con un volumen montado para la persistencia de los datos de mysql . Este será nuestro fichero docker-compose.yml :
    version: '2'
    services:
      db:
        image: mysql:5.7
        volumes:
          - "./.data/db:/var/lib/mysql"
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: wordpress
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress
          MYSQL_PASSWORD: wordpress
    
      wordpress:
        depends_on:
          - db
        image: wordpress:latest
        links:
          - db
        ports:
          - "8000:80"
        restart: always
        environment:
          WORDPRESS_DB_HOST: db:3306
          WORDPRESS_DB_PASSWORD: wordpress
    
    * El directorio ./.data/db será automáticamente creado en el directorio del proyecto, a la misma altura que el fichero docker-compose.yml , y contendrá los datos persistentes de la base de datos de nuestro WordPress.

Contruyendo el proyecto

Ahora vamos a ejecutar el comando docker-compose up -d estando situados dentro del directorio del proyecto.

Este comando descargará ( pull ) las imágenes necesarias y iniciará el contenedor de Wordpress y de la base de datos.


$ docker-compose up -d
Creating network "wordpresswptesteando_default" with the default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
Digest: sha256:e6dc999f4e2d5982e74a008ff08c0641f0832e19339aaf4f4c2bc2ca426e96c6
Status: Downloaded newer image for mysql:5.7
Creating wordpresswptesteando_db_1
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
357ea8c3d80b: Already exists
Digest: sha256:56cd7233bf69a580d823d29ad16c085392abf3fc00b1e4ed7b955b83db2544f7
Status: Downloaded newer image for wordpress:latest
Creating wordpresswptesteando_wordpress_1

Con esto ya tendremos creados y corriendo dos contenedores:

  • wordpresswptesteando_db_1 : Es el contenedor MySQL para nuestra base de datos de Wordpress.
  • wordpresswptesteando_wordpress_1 : Es el contenedor que contiene nuestra instancia de WordPress además del servidor Web apache.

Accediendo a WordPress desde el navegador

Al definir nuestro proyecto WordPress anteriormente indicamos la siguiente opción:

    ports:
      - "8000:80"

Con esto hicimos un link entre los puertos 80 del servidor web que está corriendo en nuestro contenedor WordPress y el puerto 8000 de nuestra máquina local.

Para acceder a nuestro sitio web WordPress recien creado, deberemos abrir el navegador web en la dirección ip local de nuestra máquina o localhost pero en el puerto que tenemos linkeado al contenedor Wordpress, es decir, el puerto 8000 .

Para ello vamos a abrir http://localhost:8000 en nuestro navegador web preferido y ya podremos comenzar con la instalación de WordPress.

Conclusiones

Aunque te parezca un artículo bastante largo, en realidad, todo el proceso no debería llevarte más de 3 minutos si ya dispones de Docker y Docker Compose instalados en tu máquina local.

Nos podríamos haber extendido mucho más en la explicación de Docker y Docker Compose pero nos quedaría un artículo demasiado largo. Te invito a que heches un vistazo a nuestro Curso de Docker o al Curso de Docker Swarm, Kubernetes y CoreOS Fleet si eres un usuario más avanzado.

Con el uso de Docker Compose podremos crear rápidamente y de manera sencilla una nueva instancia de WordPress cada vez que lo necesitemos, además de usar las funcionalidades propias de Docker sobre nuestros contedores.

Si tienes alguna pregunta o sugerencia, por favor, déjala en los comentarios. No olvides compartir con todo el que le pueda interesar el artículo, así ayudamos a tener mejores profesionales IT.

¡Nos vemos en el próximo artículo!