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.
- Parte 1: Ambiente básico de Docker para WordPress
- Parte 2: Ambiente com phpMyAdmin, MailHog e outras ferramentas
- Parte 3: O que é Docker e suas vantagens sobre o XAMPP
- Parte 4: WP Local Docker da 10up
Instalação do Docker e do Docker Compose
Para usar o Docker você precisa:
- Instalar o Docker
- Se você usa Linux, dê uma lida nos passos pós-instalação, principalmente este aqui, senão você vai sempre precisar chamar o docker com
sudo
- Instale o Docker Compose
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
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.
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.
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!
Que legal. Nunca vi necessidade de utilizar container para subir uma instancia local do WordPress. Mas agora até mais fácil e mais simples.