Skip to main content
Voltar aos Artigos
Docker

Docker na Prática: Entendendo Containers com PHP

Entenda os conceitos básicos do Docker na prática, construindo um container PHP do zero e explorando Dockerfile, imagens e Docker Compose.

7 minutos de leitura 4 16 Set 2026

Fala, pessoal! Bem-vindos ao meu primeiro conteúdo aqui na comunidade!

O objetivo deste texto/artigo/post/conteúdo é introduzir o Docker para quem está curioso para aprender a ferramenta. Vou tentar aprofundar o suficiente para que você consiga entender os principais conceitos sem deixar o conteúdo muito confuso. E, para aproveitar o embalo, já vamos colocar um ambiente bem básico de PHP para rodar.

Então, o que é o Docker? Ele é uma plataforma open source que podemos usar para criar containers e executar nosso código. E o que isso resolve?

Basicamente, ele resolve aquele problema em que o código funciona na minha máquina, mas não funciona na máquina de outra pessoa porque nossos ambientes são diferentes. Talvez eu tenha uma versão diferente do PHP, extensões diferentes, uma versão diferente do MySQL, uma versão diferente do Nginx, e por aí vai. O que o Docker nos ajuda a fazer é criar um ambiente padronizado para o nosso código. Então, quando criamos um container, estamos basicamente dizendo: "Ok, precisamos de X, Y e Z para esse código funcionar." E quando outra pessoa executar esse container, o Docker vai reproduzir esse ambiente na máquina dela da forma mais próxima possível.

E o que é um container? Você pode pensar nele basicamente como uma receita de ingredientes. Vamos dizer que precisamos do PHP 8.5. Podemos criar um container com o PHP 8.5 e tudo o que precisamos para executar nosso código. O que o Docker está fazendo aqui, basicamente, é criando um ambiente Linux leve para executarmos nosso código. Agora, isso pode parecer muito parecido com uma máquina virtual, mas existe uma diferença importante: uma máquina virtual é basicamente um computador inteiro rodando dentro do seu computador. Você precisa disponibilizar RAM, CPU, armazenamento, e ela executa seu próprio sistema operacional. Os containers do Docker são muito mais leves porque não estamos criando outro computador completo.

E essa é uma das razões pelas quais o Docker é tão útil. Não estamos tentando criar um computador virtual dentro de um computador. Estamos apenas criando um ambiente isolado com tudo o que precisamos para executar nosso código.

Então, como podemos criar essa receita de ingredientes? É aí que entra o Dockerfile. Basicamente, criamos um arquivo com várias instruções que parecem código. Podemos dizer para o Docker instalar alguma coisa, configurar alguma coisa ou, por exemplo, criar um Dockerfile para PHP e instalar a versão do PHP e as extensões que precisamos. E isso pode levar bastante tempo, principalmente quando precisamos criar e configurar tudo do zero.

Mas, felizmente, você não precisa fazer tudo do zero. Já existem imagens Docker que foram criadas para nós, algumas pela comunidade e outras oficiais, como a imagem oficial do PHP. Essas imagens facilitam bastante o nosso trabalho, porque não precisamos criar toda essa receita todas as vezes.

Então, vamos dizer que queremos fazer um bolo. Criar um Dockerfile do zero é como fazer o bolo nós mesmos, começando por todos os ingredientes. Usar uma imagem que já existe é mais parecido com comprar um bolo que já está pronto. E se essa imagem foi criada por alguém que sabe o que está fazendo, ou é uma imagem oficial, podemos aproveitar todo o trabalho que já foi feito e facilitar bastante a nossa vida.

Mas, para ter certeza de que realmente sabemos como um Dockerfile funciona, vamos colocar a mão na massa. Para o nosso exemplo, vou ter uma pasta vazia contendo apenas o arquivo hello.php:

<?php echo "Hello, World!";

E esse será o nosso Dockerfile. Deixei alguns comentários para vocês entenderem o que estamos fazendo:

FROM ubuntu:latest 
# Instala o PHP 
RUN apt-get update && apt-get install -y php 
# Define nosso diretório de trabalho dentro do container 
WORKDIR /var/www/html 
# Expõe a porta 8000 para nossa máquina 
EXPOSE 8000 
# Copia o conteúdo do diretório atual da máquina 
# para o diretório de trabalho dentro do container 
# O ponto da esquerda representa o diretório atual da máquina, 
# e o ponto da direita representa o diretório atual dentro do container 
COPY . . 
# Inicia o servidor embutido do PHP quando o container iniciar 
CMD ["php", "-S", "0.0.0.0:8000", "./hello.php"] 
# Execute "docker build -t helloworld ." para criar a imagem Docker # e dar a ela o nome "helloworld" 
# Execute "docker run -p 8000:8000 helloworld" para iniciar o container # e mapear a porta 8000 da máquina para a porta 8000 do container

Perceba que estamos realmente "montando" um pequeno ambiente Ubuntu para trabalhar, e começando a executar comandos que normalmente executaríamos no nosso próprio PC.

Esse Dockerfile funciona, mas ele tem um problema importante. Estamos instalando o PHP usando apt-get install php, o que significa que estamos dependendo da versão do PHP disponível nos repositórios do Ubuntu. Se quisermos especificamente o PHP 7.3, por exemplo, as coisas ficam muito mais complicadas. Teríamos que encontrar os pacotes e repositórios corretos ou até mesmo baixar e compilar o PHP, dependendo do ambiente.

Acho que a essa altura já dá para perceber como isso pode ser bastante trabalhoso toda vez que quisermos começar a usar Docker no nosso ambiente. Mas não se preocupe, nem tudo está perdido.

Lembra das imagens Docker que falamos antes? Podemos usar a imagem oficial do PHP em vez de começar com o Ubuntu e instalar o PHP manualmente.

E nem precisamos criar um Dockerfile para isso. Podemos usar o Docker Compose para dizer ao Docker qual imagem queremos usar e como queremos que nosso container seja executado.

Para o nosso exemplo, vamos criar um arquivo compose.yaml:

services:
	php:
		image: php:8.3-cli
      	working_dir: /var/www/html
      	volumes:
      		- .:/var/www/html
        ports:
        	- "8000:8000"
        command: php -S 0.0.0.0:8000 ./hello.php

E é basicamente isso. Estamos dizendo ao Compose que temos um serviço chamado php, que queremos usar a imagem php:8.3-cli e que nosso projeto deve estar disponível dentro do container em /var/www/html. Também estamos mapeando a porta 8000 do container para a porta 8000 da nossa máquina e dizendo qual comando deve ser executado quando o container iniciar.

Agora podemos executar:

docker compose up

O Compose vai baixar a imagem do PHP caso ainda não a tenhamos, criar o container e iniciá-lo. E como especificamos o command, o servidor PHP vai iniciar automaticamente junto com o container.

Agora, se você abrir http://localhost:8000 no seu navegador, deverá ver o nosso bom e velho Hello, World!

E é isso. Acabamos de criar um container PHP usando uma imagem oficial do Docker, sem precisar escrever um Dockerfile.

Existe muita coisa que poderíamos adicionar aqui. Poderíamos falar sobre extensões do PHP, Nginx, bancos de dados, volumes, networking, variáveis de ambiente e várias outras coisas. Mas o objetivo aqui não era criar um ambiente PHP completo e pronto para produção. Eu só queria mostrar o que realmente acontece quando criamos um container Docker e dar um exemplo básico sobre o qual você pode construir.

E, a partir daqui, depois que você entende esses conceitos básicos, ferramentas como o Docker Compose começam a fazer muito mais sentido. Em vez de parecer que estamos apenas executando um monte de containers mágicos, você começa a entender o que realmente está acontecendo por baixo dos panos.

Compartilhe este conteúdo
Felipe Carneiro Silva de Santana
Sobre o autor
Felipe Carneiro Silva de Santana
Colaborador da comunidade PHP Belém

Conteúdos relacionados

23 Ago 2026 5 min

Aposente o FTP: Como Criar um Ambiente WordPress Seguro, Versionado e Automatizado

Chega de ficar só criando sites WordPress direto em produção, sem ter nenhum versionamento do código. Fazer tudo direto na hospedagem é um risco enorme e te deixa sem controle nenhum sobre a evolução do seu próprio projeto. Neste artigo, você vai aprender a estruturar um fluxo de desenvolvimento extremamente seguro e descomplicado. Descubra como usar o DDEV para rodar ambientes locais padronizados em poucos minutos, as regras de ouro para versionar seu código com Git (salvando apenas o que importa) e como configurar o GitHub Actions para fazer o deploy das suas alterações de forma automática e à prova de falhas. O guia definitivo para sair do amadorismo e blindar seus projetos com um ecossistema profissional.

04 Ago 2026 5 min

Análise de Dados e Machine Learning: explorando o ecossistema PHP

Descubra como o PHP moderno pode ser utilizado para Análise de Dados e Machine Learning sem a necessidade de adotar novas linguagens ou dividir a infraestrutura do seu projeto. Neste artigo, exploramos bibliotecas nativas como Rubix ML e MathPHP, arquiteturas que delegam a carga pesada para o banco de dados e técnicas de alta performance com o uso de Generators (yield). Entenda por que manter uma stack unificada pode simplificar a manutenção, reduzir custos operacionais e acelerar a entrega de valor em sistemas corporativos robustos.

Continue lendo

Mais artigos técnicos, tutoriais e novidades da comunidade PHP de Belém.

Ver todos os artigos