Depois daquele vídeo sobre o Local By Flywheel, muita gente me pediu vídeos sobre docker. Decidi então fazer um conteúdo sobre docker dividido em três partes.

Instalação do Docker e do Docker Compose

Para usar o Docker você precisa:

O Docker Compose é um programa bem pequeno, mas que possibilita o uso de arquivos YAML (.yml) para o Docker. Se nunca ouviu falar desses arquivos na vida, não se assuste. Eles são só arquivos de texto simples, organizados por indentação.

Criação do ambiente

Crie uma nova pasta em qualquer lugar do seu computador e:

  • Crie uma pasta chamada wordpress
  • Crie outra pasta chamada db
  • Crie um arquivo chamado docker-compose.yml
  • Cole neste arquivo o conteúdo da próxima seção
  • Execute docker-compose up
  • Acesse localhost:8080
  • Para encerrar, volte para o terminal e aperte CTRL+C
Nossa estrutura de arquivos

Quando você executar docker-compose up, o Docker analisará o seu arquivo docker-compose.yml e buscará tudo o que é necessário para subir o seu ambiente. Na primeira vez ele precisará baixar as imagens listadas no docker-compose, mas é só da primeira vez.

Começo da saída quando executamos docker-compose up pela segunda vez

docker-compose.yml

Este vai ser o conteúdo do nosso primeiro docker-compose.yml. Lembre-se de que a indentação de arquivos YAML é feita só com espaços. Não use TAB.

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - ./wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - ./db:/var/lib/mysql

O conteúdo deste arquivo é quase idêntico ao que consta na documentação oficial da imagem do WordPress. A única diferença é que aqui os volumes começam com ./, para que o Docker use as pastas que nós criamos no começo. Isto torna desnecessária a seção final volumes do arquivo original.

Entendendo o Docker

Olhando para o docker-compose.yml nós podemos ver alguns dos conceitos básicos do Docker. Vamos dar uma olhada nos 3 principais:

Imagens e Containers (ou contêineres)

Para funcionar, o WordPress precisa de um servidor de arquivos (Apache ou NGINX, por exemplo) e um servidor de banco de dados. No nosso ambiente, cada um desses elementos, Apache e MySQL, será um contêiner. Pense em um contêiner como um máquina virtual, um computador isolado do seu com os programas que você precisa. Graças à forma como o Docker funciona, os contêineres são mais rápidos que uma máquina virtual e, portanto, você pode subir mais de um contêiner por vez.

Para subir um contêiner é preciso uma imagem. Pense em uma imagem com o DVD de instalação do Windows — ou como o pen drive com a ISO do Linux —, por exemplo. Você precisa da imagem para criar um contêiner, mas depois que o contêiner é criado, a sua ligação com a imagem se perde: o que você mudar no contêiner não afetará a imagem, assim como a sua instalação do Linux não afeta mais o conteúdo do pen drive.

Volumes

Volumes são arquivos compartilhados entre os contêineres e o seu computador. Basicamente, os volumes são as pastas do contêiner que você precisa ter acesso. Por exemplo, a pasta /var/www/html são as pastas servidas pelo Apache do contêiner wordpress e você quer alterá-las para mexer em um tema ou instalar um plugin. Usando ./wordpress:/var/www/html estamos dizendo ao Docker que, quando alterarmos qualquer coisa na nossa pasta wordpress, a mudança deve ser refletida na pasta /var/www/html do contêiner.

Volumes são importantes para persistir os dados. Embora o Docker faça um cache dos contêineres, não se pode garantir que o cache durará para sempre. Para não perdermos as mudanças feitas no banco de dados, usamos um volume também para o MySQL, assim conseguimos manter intactos os dados do banco.

Portas, variáveis de ambiente, etc.

O Docker oferece muitas opções na hora de subir um contêiner. Ao usar o Docker direto na linha de comando, sem o Docker Compose, cada uma dessas variáveis é passada diretamente pelo terminal. Com o Docker Compose conseguimos manter as coisas de uma forma mais organizada.

Exemplo de ambiente Docker executado totalmente pela linha de comando

Para as portas, se quiséssemos subir o WordPress em localhost ao invés de localhost:8080 bastaria mudar 8080:80 para 80:80. O restart: always diz ao Docker para reiniciar o contêiner em caso de falha. A documentação oficial do Docker Compose tem a lista completa de chaves possíveis. As variáveis de ambiente, a seção environment do arquivo, variam de imagem para imagem.

Mas esse ambiente não resolve todos os meus problemas!

Sim, eu sei. É um ambiente simples demais e ainda não tem algumas ferramentas que precisamos para a rotina de desenvolvimento, como o PHPMyAdmin, por exemplo. Vamos dar um passo a mais na Parte 2. Não se esqueça de assinar o canal e a newsletter para não perder!