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.
Bom por esse post é isso a gente se vê no próximo post!!!
One thought to “Configurando uma stack WordPress com Docker e Docker Compose”