Nesta parte vamos ver as vantagens do Docker sobre o XAMPP e também entender um pouco melhor o que é o Docker.

Por que usar o Docker?

No começo era o XAMPP…

Acho que a melhor porta de entrada para o mundo de desenvolvimento web com PHP ainda são os ambientes LAMP/WAMP/XAMPP. Esses pacotes trazem tudo o que você precisa para começar: apache como servidor de arquivos, MySQL como banco de dados e PHP rodando pelo apache. Tudo isso com um botão de liga e desliga, para não deixar nada rodando quando não for preciso. Antes do XAMPP, era preciso instalar cada software direto no sistema operacional e o nível da bagunça era gigante. Lembram da época que o Skype usava a porta 80? Pois é.

Embora o XAMPP ajude muito na organização, ele não resolve todos os problemas. Dois deles, os principais na minha opinião, são:

  1. Você sempre usa a mesma versão de tudo para todos os projetos (PHP, MySQL e Apache, por exemplo);
  2. Cada projeto normalmente vira um diretório: http://localhost/projeto-1, http://localhost/projeto-2.

O primeiro problema, as versões dos programas, afeta principalmente a depuração e o trabalho em conjunto. O servidor de produção tem PHP 7.3, a sua máquina tem PHP 5.6 e a do seu colega PHP 7.4 e ninguém consegue reproduzir aquele erro que só acontece com o site no ar. Neste caso vocês dois poderiam trocar a versão dos seus programas locais, mas o que fazer quando existem vários projetos acontecendo em vários ambientes diferentes?

O segundo problema, o do URL de cada projeto, afeta normalmente os links e endereços absolutos. A essa altura se espera que você não use nenhum endereço absoluto no código (o WordPress tem um zilhão de funções para ajudar nisso), e para qualquer troca de ambiente um search-replace com o WP-CLI resolve. De qualquer forma ter tudo rodando direto na raiz ajuda em vários cenários.

O que é Docker?

Segundo a documentação oficial:

O Docker é uma plataforma aberta para desenvolvimento, entrega e execução de aplicações. O Docker permite que você separe suas aplicações da sua infraestrutura, de forma que você possa entregar os programas mais rapidamente. Com o Docker, você pode gerenciar sua infraestrutura da mesma forma que você gerencia suas aplicações. Tirando vantagem das metodologias do Docker para entregar, testar e implementar código rapidamente, você pode reduzir significativamente o tempo entre escrever o código e executá-lo em produção.

Docker overview

Resumindo, o Docker é uma forma de você instalar sempre os mesmos programas, com as mesmas versões e com as mesmas configurações em qualquer máquina e em qualquer lugar. Se o seu servidor de produção está nos últimos dias de vida, com o Docker você só precisa subir os mesmos contêineres em outra máquina e desligar a antiga. Não é preciso instalar e configurar cada coisa.

Para uma equipe com vários desenvolvedores, já dá para imaginar que ele resolve este problema:

Por que o Docker é mais rápido que máquinas virtuais?

Se você já usou alguma máquina virtual na vida e ficou traumatizado, eu entendo e compartilho a sua dor. A forma como o Docker gerencia seus contêineres permite que recursos sejam compartilhados, isso sem falar da alocação dinâmica de memória — em algumas máquinas virtuais, só de ligar você já perde alguns giga de memória para a VM —, processos do Docker que rodam direto no seu sistema operacional, ao invés de passar pelo sistema operacional da VM, etc.

Como uma imagem vale mais do que mil palavras, compare essas duas para entender um pouco melhor as diferenças:

No Docker cada contêiner tem apenas as suas aplicações, tendo o “sistema operacional” gerenciado pelo próprio Docker…
…nas máquinas virtuais cada VM tem um sistema operacional separado, aumentando muito o volume de coisas com que o computador hospedeiro tem que lidar.