Configurando uma stack WordPress com Docker e Docker Compose

Spread the love

Fala Pessoal beleza!

Nesse post vamos inicializar uma stack WordPress com um banco de dados MySQL usando o Docker Compose. Pra isso crie um arquivo chamado docker-compose.yml (precisa ser exatamente isso ou não irá funcionar). Dentro dele iremos definir a versão do docker-compose.yml no nosso exemplo 3.4. Em seguida adicione a propriedade services. É nela que definimos os serviços que a nossa stack terá, simplificando muuuito podemos dizer que cada serviço equivale a um contêiner. No nosso exemplo teremos os serviços db e wordpress conforme o código abaixo. Um detalhe muito importante é não usar TABS, se não usarmos apenas espaços e formatarmos corretamente o nosso arquivo não será interpretado corretamente e por consequência não irá executar.

Definindo serviços/contêineres no docker-compose.yml

 version: '3.4'
 services:
   db:
   wordpress:

Agora vamos definir cada um dos nossos serviços vamos começar pelo db. Primeiro vamos escolher a Docker image a partir da qual o serviço/contêiner será inicializado no nosso caso o mysql:5.7.22. Poderíamos definir apenas mysql sem uma versão e nesse caso o Docker Compose irá usar a tag latest (última versão estável da Docker image). Se quiséssemos poderíamos usar qualquer versão do MySQL como por exemplo mysql:8.0 que o Docker Compose faria o pull (download) da imagem apropriada. Depois iremos definir uma propriedade command que funciona de modo similar à instrução COMMAND do Dockerfile, para entender mais sobre isso baixe o meu e-Book Docker um guia Rápido. No nosso exemplo estamos usando o command para inicializar o MySQL no modo de autenticação nativo. Sem isso não conseguiríamos logar no nosso SGBD MySQL. Em seguida vamos definir através de quais portas iremos acessar o MySQL. No meu caso 3306 no contêiner e 3308 no host, escolhi a 3308 por que na minha máquina eu tenho o MySQL instalado e se eu deixasse a 3306 ocorreria um conflito de portas.

Por hora vamos manter o db assim e vamos configurar o serviço do wordpress. Primeiro vamos especificar a Docker image no nosso caso wordpress:latest. Mesmo que omitíssemos a TAG a latest seria baixada por padrão. Se quiséssemos poderíamos especificar uma TAG específica. Em seguida definimos as portas que no caso será a 80 tanto no contêiner quanto no host (minha máquina). No mesmo alinhamento de image e ports vamos adicionar uma nova propriedade chamada depends_on. Essa propriedade indica ao Docker Compose que o serviço do wordpress depende do serviço do db e por isso ele deve iniciar o db primeiro.

 version: '3.4'
 services:
   db:
     image: mysql:5.7.22
     command: mysqld --default_authentication_plugin=mysql_native_password
     ports:
       - 3308:3306
   wordpress:
     image: wordpress:latest
     ports:
       - 80:80
     depends_on:
       - db
 

Conhecendo environment e volumes no Docker Compose

Agora vamos avançar um pouco mais e vamos conhecer as propriedades environment e volumes. Environment como o próprio nome diz serve para definirmos valores de variáveis de ambiente dentro do contêiner. A maioria das variáveis são auto evidentes, mas algumas merecem uma explicação especial. A variável TZ serve para definirmos o TimeZone em que o contêiner está sendo executado. Se você está no Brasil com exceção de uns poucos estados seu timezone provavelmente será America/Sao_Paulo. A variável MYSQL_ROOT_PASSWORD é obrigatória e sua stack não irá subir sem ela. Ela é usada para definirmos a senha do usuário root do MySQL. As demais acredito que sejam auto explicativas. Em seguida temos os volumes que sendo bem simplista, é como se fosse um mapeamento de um diretório dentro de um contêiner com um diretório no host. No nosso caso o serviço do MySQL não tem nenhum volume e o serviço do WordPress tem dois volumes.

 version: '3.4'
 services:
   db:
     image: mysql:5.7.22
     command: mysqld --default_authentication_plugin=mysql_native_password
     environment:
       TZ: America/Sao_Paulo
       MYSQL_ROOT_PASSWORD: docker
       MYSQL_USER: docker
       MYSQL_PASSWORD: docker
       MYSQL_DATABASE: wordpress
     ports:
       - 3308:3306
   wordpress:
     image: wordpress:latest
     volumes:
       - ./config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
       - ./wp-app:/var/www/html
     environment:
       TZ: America/Sao_Paulo
       WORDPRESS_DB_HOST: db
       WORDPRESS_DB_NAME: wordpress
       WORDPRESS_DB_USER: root
       WORDPRESS_DB_PASSWORD: docker
     ports:
       - 80:80
 

Redes no Docker Compose

Apesar de o Docker Compose já criar uma rede default entre os contêineres/serviços é uma boa prática nomearmos uma rede. Pra isso adicione a propriedade networks no mesmo alinhamento de services. O nome da nossa rede será wordpress-network e ela será inicializada em modo bridge. Feito isto basta adicionarmos a propriedade networks em cada serviço. Essa propriedade deve ficar no mesmo alinhamento que ports e environment e nela podemos definir uma ou mais redes. No nosso caso teremos apenas a rede wordpress-network.

version: '3.4'
services:
  db:
    image: mysql:5.7.22
    command: mysqld --default_authentication_plugin=mysql_native_password
    environment:
      TZ: America/Sao_Paulo
      MYSQL_ROOT_PASSWORD: docker
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      MYSQL_DATABASE: wordpress
    ports:
      - 3308:3306
    networks:
      - wordpress-network

  wordpress:
    image: wordpress:latest
    volumes:
      - ./config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
      - ./wp-app:/var/www/html
    environment:
      TZ: America/Sao_Paulo
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: docker
    ports:
      - 80:80
    networks:
      - wordpress-network

networks:
    wordpress-network:
      driver: bridge

Feito isto toda a nossa stack está configurada e já podemos executá-la. E é exatamente isso que faremos no próximo post. E se você quer se tornar um verdadeiro ninja Docker e conhecer mais sobre Docker e Docker Compose eu recomendo baixar o meu e-Book gratuito Docker um guia Rápido e dar uma conferida numa playlist sobre o tema no meu canal no Youtube.

Baixe o Guia Docker grátis




Bom por esse post é isso a gente se vê no próximo post!!!

Treinamentos relacionados com este post












Leandro

Sou desenvolvedor de software a desde 2008, além de programar gosto de esportes de aventura como rapel, tirolesa, trilhas de bike, apreciador de cervejas, baladas, motos e do bom e velho Rock’n Roll também gosto de história, ficção científica e de tecnologia. Atualmente sou consultor de Agile Software Delivery na Erudio Training e instrutor na Udemy.

One thought to “Configurando uma stack WordPress com Docker e Docker Compose”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *