WordPress · 13 min read · Sep 10, 2025
Como Instalar o WordPress com Docker Compose

O WordPress CMS (Sistema de Gerenciamento de Conteúdo) é uma plataforma de código aberto amplamente utilizada que permite aos usuários criar, gerenciar e publicar conteúdo digital, principalmente para sites e blogs. Lançado inicialmente em 2003, o WordPress cresceu para se tornar o CMS mais popular do mundo, alimentando mais de 40% de todos os sites na internet. Ele oferece uma interface amigável que permite que indivíduos com pouca ou nenhuma experiência em programação construam e mantenham sites de qualidade profissional. O WordPress é altamente personalizável, com milhares de temas e plugins disponíveis para estender sua funcionalidade, atendendo a uma ampla gama de necessidades, desde blogs simples até sites de e-commerce complexos. Seu forte suporte da comunidade, atualizações regulares e extensa documentação fazem dele uma escolha confiável e versátil tanto para iniciantes quanto para desenvolvedores experientes.
O Docker é uma plataforma de código aberto projetada para automatizar a implantação, escalonamento e gerenciamento de aplicativos dentro de contêineres leves e portáteis. Introduzido em 2013, o Docker revolucionou o desenvolvimento de software ao fornecer um ambiente consistente para aplicativos serem executados, independentemente de onde são implantados, seja na máquina local de um desenvolvedor, em data centers locais ou na nuvem. Os contêineres agrupam um aplicativo com todas as suas dependências, bibliotecas e arquivos de configuração, garantindo desempenho consistente em diferentes ambientes. Essa containerização simplifica o fluxo de trabalho de desenvolvimento, melhora a colaboração e aumenta a eficiência, permitindo que os desenvolvedores criem, compartilhem e executem aplicativos de forma contínua. O ecossistema do Docker inclui ferramentas e serviços para orquestração de contêineres, como Docker Swarm e Kubernetes, que facilitam o gerenciamento de implantações de contêineres em larga escala, tornando-se uma tecnologia fundamental nas práticas modernas de DevOps.
Este tutorial ensinará como instalar o WordPress usando Docker/Docker Compose. Usando o Docker, o processo de instalação da pilha preferida se torna muito mais fácil. Você pode usar a mesma configuração para instalar o WordPress rapidamente em vários servidores. Também instalaremos a ferramenta phpMyAdmin para gerenciar bancos de dados junto com o servidor proxy Nginx para servir o site via SSL.
Pré-requisitos
- Um servidor Linux com um usuário não-root com privilégios sudo. Estamos usando um servidor rodando Ubuntu 24.04 para nosso tutorial.
- Um nome de domínio totalmente qualificado (FQDN) apontando para seu servidor. Para nossos propósitos, usaremos
example.comcomo o nome de domínio para o site WordPress ephpmyadmin.example.compara o site phpMyAdmin. - Certifique-se de que tudo está atualizado.
$ sudo apt update - Instale pacotes utilitários básicos. Alguns deles podem já estar instalados.
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Passo 1 - Configurar o Firewall
O primeiro passo é configurar o firewall. O Ubuntu vem com ufw (Uncomplicated Firewall) por padrão.
Verifique se o firewall está em execução.
$ sudo ufw status
Você deve obter a seguinte saída.
Status: inactive
Permita a porta SSH para que o firewall não interrompa a conexão atual ao ativá-lo.
$ sudo ufw allow OpenSSH
Permita também as portas HTTP e HTTPS.
$ sudo ufw allow http
$ sudo ufw allow https
Ative o Firewall
$ sudo ufw enable
Comando pode interromper conexões ssh existentes. Prosseguir com a operação (y|n)? y
Firewall está ativo e habilitado na inicialização do sistema
Verifique o status do firewall novamente.
$ sudo ufw status
Você deve ver uma saída semelhante.
Status: active
Para Ação De
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
Passo 2 - Instalar Docker e Docker Compose
O Ubuntu 22.04 vem com uma versão mais antiga do Docker. Para instalar a versão mais recente, primeiro, importe a chave GPG do Docker.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Crie um arquivo de repositório do Docker.
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Atualize a lista de repositórios do sistema.
$ sudo apt update
Instale a versão mais recente do Docker.
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Verifique se está em execução.
$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-07-19 17:11:19 UTC; 3s ago
TriggeredBy: ? docker.socket
Docs: https://docs.docker.com
Main PID: 1163 (dockerd)
Tasks: 7
Memory: 21.9M
CPU: 221ms
CGroup: /system.slice/docker.service
??2803 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Por padrão, o Docker requer privilégios de root. Se você quiser evitar usar sudo toda vez que executar o comando docker, adicione seu nome de usuário ao grupo docker.
$ sudo usermod -aG docker $(whoami)
Você precisará sair do servidor e entrar novamente como o mesmo usuário para habilitar essa mudança ou usar o seguinte comando.
$ su - ${USER}
Confirme que seu usuário foi adicionado ao grupo Docker.
$ groups
navjot wheel docker
Passo 3 - Criar Arquivo Docker Compose para WordPress
Farei toda a instalação do Docker WordPress em /opt. Você pode escolher um local diferente como /var ou /home para atender às suas necessidades.
cd /optCrie um diretório para a configuração do WordPress.
$ mkdir wordpressMude para o diretório.
$ cd wordpressCrie e abra o arquivo Docker compose para edição.
$ nano docker-compose.ymlCole o seguinte código nele.
services:
wp:
image: wordpress:latest
container_name: wordpress-app
restart: unless-stopped
expose:
- 8080
volumes:
- ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
- ./wp-app:/var/www/html
#- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Desenvolvimento de plugin
#- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Desenvolvimento de tema
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: "${DB_NAME}"
WORDPRESS_DB_USER: "${DB_USER_NAME}"
WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}"
VIRTUAL_HOST: example.com
LETSENCRYPT_HOST: example.com
depends_on:
- db
links:
- db
wpcli:
image: wordpress:cli
container_name: wpcli_app
volumes:
- ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
- ./wp-app:/var/www/html
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: "${DB_NAME}"
WORDPRESS_DB_USER: "${DB_USER_NAME}"
WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}"
depends_on:
- db
- wp
pma:
image: phpmyadmin/phpmyadmin
container_name: pma
restart: unless-stopped
environment:
# https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables
PMA_HOST: db
PMA_PORT: 3306
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
UPLOAD_LIMIT: 50M
VIRTUAL_HOST: phpmyadmin.example.com
LETSENCRYPT_HOST: phpmyadmin.example.com
expose:
- 8081
links:
- db:db
db:
image: mysql:latest
container_name: wordpressdb
restart: unless-stopped
command: [
'--default_authentication_plugin=mysql_native_password',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
volumes:
- ./wp-data:/docker-entrypoint-initdb.d
- db_data:/var/lib/mysql
environment:
MYSQL_DATABASE: "${DB_NAME}"
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_USER: "${DB_USER_NAME}"
MYSQL_PASSWORD: "${DB_USER_PASSWORD}"
volumes:
db_data:
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Existem duas imagens do WordPress que estamos puxando. Uma é para o site e a outra é para a ferramenta WP-CLI. Ambas as imagens dependem da imagem do MySQL 8.0. Aqui definimos as variáveis de ambiente para as credenciais do Banco de Dados. Criamos dois volumes para ambos os contêineres, um dos quais aponta para os arquivos públicos do site WordPress e o segundo aponta para a localização personalizada do PHP.ini. Também definimos as variáveis de ambiente para o domínio do host virtual Nginx e o domínio SSL Let’s encrypt para o site WordPress.
Você pode adicionar mais variáveis de ambiente e adicionar dados personalizados wp-config.php ao arquivo Docker. Você pode aprender sobre as variáveis de ambiente adicionais na página do WordPress DockerHub.
A próxima imagem é para o phpMyAdmin, que depende da mesma imagem do MySQL e se conecta a ela usando a senha root. Ele tem um limite de upload de 50MB. Você pode alterá-lo de acordo com suas necessidades e o tamanho do seu banco de dados. Assim como no site WordPress, definimos o domínio do host virtual Nginx e o nome do domínio SSL Let’s encrypt para o site phpMyAdmin.
A última imagem é para o banco de dados MySQL. Passamos alguns comandos para configurá-lo com o método de autenticação padrão e o conjunto de caracteres. Também criamos alguns volumes para armazenar os dados e configuramos variáveis de ambiente para as credenciais do banco de dados.
O próximo passo é criar o arquivo de ambiente para as variáveis usadas no arquivo compose. Crie e abra o arquivo de ambiente para edição.
$ sudo nano .env
Cole o seguinte código nele.
DB_NAME=wordpress
DB_USER_NAME=username
DB_USER_PASSWORD=userpassword
DB_ROOT_PASSWORD=password
Você pode salvar o arquivo pressionando Ctrl + X e digitando Y quando solicitado. Substitua as variáveis pelo nome de usuário e senha de sua escolha.
Você pode personalizar a configuração do PHP usando um arquivo php.ini personalizado.
Crie uma pasta para a configuração do PHP.
$ mkdir config
Crie e abra o arquivo php.conf.ini para edição.
$ nano config/php.conf.ini
Cole o seguinte código nele. Ajuste os valores conforme sua necessidade. O limite de upload para o contêiner PhpMyadmin é independente dos valores que você usa neste arquivo.
file_uploads = On
memory_limit = 500M
upload_max_filesize = 30M
post_max_size = 30M
max_execution_time = 600
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Passo 4 - Atualizar Docker Compose Para Nginx
Crie o diretório para a configuração do Nginx.
$ mkdir nginx
Crie um diretório para Hosts Virtuais dentro desse diretório.
$ mkdir nginx/vhost
Crie e abra o arquivo nginx/vhost/wordpress.example.com para edição.
$ nano nginx/vhost/wordpress.example.com
Cole o seguinte código nele.
server_tokens off;
client_max_body_size 30m;
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Faça o mesmo para o arquivo nginx/vhost/phpmyadmin.example.com.
$ nano nginx/vhost/phpmyadmin.example.com
Cole o seguinte código nele.
server_tokens off;
client_max_body_size 50m;
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Abra o arquivo docker compose novamente.
$ nano docker-compose.yml
Cole o seguinte código antes da linha volumes: db_data:.
nginx:
container_name: nginx
image: nginxproxy/nginx-proxy
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx/html:/usr/share/nginx/html
- ./nginx/certs:/etc/nginx/certs
- ./nginx/vhost:/etc/nginx/vhost.d
logging:
options:
max-size: "10m"
max-file: "3"
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
No código acima, puxamos a imagem Docker do proxy Nginx e expomos as portas 80 e 443 para o contêiner host, que serão usadas para se conectar ao mundo exterior. Também criamos volumes para a página HTML do Nginx, um diretório onde todos os certificados SSL serão armazenados e o diretório para hosts virtuais, que usamos acima para adicionar configuração adicional do Nginx. Configuramos o tamanho do upload de arquivos para os sites WordPress e phpMyAdmin. O nome do domínio do site é retirado das variáveis de ambiente que definimos na etapa anterior.
Passo 5 - Atualizar Docker Compose para SSL
Abra o arquivo docker compose para edição.
$ nano docker-compose.yml
Cole o seguinte código antes da linha volumes: db_data:.
acme-companion:
container_name: acme-companion
image: nginxproxy/acme-companion
restart: unless-stopped
volumes_from:
- nginx
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./nginx/acme:/etc/acme.sh
environment:
DEFAULT_EMAIL: [email protected]
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Aqui, estamos puxando a imagem Docker do Acme companion, que funciona com o proxy Nginx. Ele puxa os volumes do contêiner Nginx. Também definimos um volume para a ferramenta acme.sh, que armazena toda a configuração relacionada ao SSL Let’s Encrypt. Por fim, definimos uma variável de ambiente para registrar o certificado SSL com o Let’s Encrypt.
Passo 6 - Iniciar e Instalar o WordPress
Agora que todos os nossos arquivos de configuração estão completos, é hora de iniciar e lançar os contêineres.
$ docker compose up -d
Aguarde alguns minutos e verifique o status dos contêineres.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1e8a9b5169d nginxproxy/acme-companion "/bin/bash /app/entr…" 14 seconds ago Up 7 seconds acme-companion
8a37c78ff790 wordpress:latest "docker-entrypoint.s…" 14 seconds ago Up 7 seconds 80/tcp, 8080/tcp wordpress-app
4f9c777c97c2 phpmyadmin/phpmyadmin "/docker-entrypoint.…" 14 seconds ago Up 7 seconds 80/tcp, 8081/tcp pma
1b1dede46b07 nginxproxy/nginx-proxy "/app/docker-entrypo…" 14 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx
b9cf64a2f4a3 mysql:latest "docker-entrypoint.s…" 14 seconds ago Up 11 seconds 3306/tcp, 33060/tcp wordpressdb
Abra a URL https://example.com para iniciar o instalador do WordPress.

Selecione seu idioma e clique no botão Continuar para prosseguir para a próxima página.

Preencha os detalhes do site, escolha seu nome de usuário, senha e endereço de e-mail e clique no botão Instalar WordPress para iniciar a instalação.

Você será levado à página de sucesso da instalação. Clique no botão Log in para ir para a página de login.

Digite seus dados de login e clique no botão Log In para abrir o painel do WordPress.

Você pode começar a usar o WordPress agora.
Passo 7 - Acessar PhpMyAdmin
Você pode acessar o phpMyAdmin através da URL https://phpmyadmin.example.com.

Digite root como nome de usuário e a senha root e clique em Log in para abrir o painel.

Você pode começar a usar o phpMyAdmin agora.
Passo 8 - Acessar WP-CLI
Você pode acessar o WP-CLI usando o seguinte comando.
$ docker compose run --rm wpcli cli version
Você obterá a seguinte saída.
[+] Running 2/0
? Container wordpressdb Running 0.0s
? Container wordpress-app Running 0.0s
WP-CLI 2.7.1
Para evitar digitar um comando tão longo toda vez, podemos usar o recurso de alias do Linux.
$ alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"
Agora você pode digitar o seguinte comando de qualquer lugar em seu contêiner.
$ wp cli version
Os aliases no Linux são temporários. Para tornar o alias permanente, você precisa editar o arquivo ~/.bashrc. Abra-o para edição.
$ nano ~/.bashrc
Cole a seguinte linha no final do arquivo.
# Aliases personalizados
alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Fonte o arquivo para recarregar a configuração.
$ source ~/.bashrc
Você pode começar a usar o WP-CLI.
Passo 9 - Fazer Backup do WordPress
Existem várias maneiras de fazer backup do WordPress. A maneira mais fácil é usar um plugin. Existem vários plugins disponíveis para isso. Você também pode usar o phpMyAdmin para criar um backup.
Você também pode usar a linha de comando para fazer backup do banco de dados do WordPress. Mude para o diretório do WordPress.
$ cd ~/wordpress
Use o seguinte comando para fazer backup do banco de dados do WordPress. Você será solicitado a inserir sua senha root do MySQL.
$ docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | sudo tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null
Digite a senha: password
O comando acima criará o backup SQL no diretório ~/wordpress/wp-data.
Verifique o conteúdo do diretório.
$ ls -al wp-data
total 908
drwxr-xr-x 2 root root 4096 Jan 11 10:15 ./
drwxrwxr-x 6 navjot navjot 4096 Jan 11 10:05 ../
-rw-r--r-- 1 root root 919814 Jan 11 10:14 data_11-01-2023_10_14_40.sql
Você pode ver o banco de dados salvo no diretório. Você pode restaurar esse banco de dados usando a ferramenta phpMyAdmin ou usando o seguinte comando.
$ docker compose exec db sh -c "exec mysql -uroot -p" < wp-data/data_11-01-2023_10_14_40.sql
Você pode criar um cron job para fazer backup do banco de dados regularmente.
Crie o script de backup no diretório /etc/cron.daily e abra-o para edição.
$ sudo nano /etc/cron.daily/wpbackup.sh
Cole o seguinte código nele.
#!/bin/bash
docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Torne o script executável.
$ sudo chmod +x /etc/cron.daily/wpbackup.sh
Agora, seu banco de dados será salvo diariamente.
Passo 10 - Atualizar o WordPress
A maneira mais fácil de atualizar o WordPress é usar o atualizador embutido. Você também pode atualizá-lo usando o Docker. O primeiro passo é fazer backup do banco de dados do WordPress usando o comando da etapa 9.
Em seguida, mude para o diretório.
$ cd ~/wordpress
Pare os Contêineres.
$ docker compose down --remove-orphans
Puxe as imagens de contêiner mais recentes.
$ docker compose pull
Faça quaisquer alterações no docker-compose.yml, se desejar.
Reinicie os contêineres do WordPress.
$ docker compose up -d
Conclusão
Isso conclui nosso tutorial sobre como instalar o WordPress usando Docker Compose, phpMyAdmin e WP-CLI. Se você tiver alguma dúvida, poste nos comentários abaixo.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.