Opa gurizada, postzinho falando de como rodar uma aplicação CakePHP 2.x e 3.x usando docker com docker-compose.
Pra quem não conhece o docker vamos deixar ele se aprensentar. Segundo o site:
Docker allows you to package an application with all of its dependencies into a standardized unit for software development.
Quem quiser entender melhor é só dar uma lida neste artigo aqui do Rafael Gomes(gomex).
Aqui vamos rodar o CakePHP com mysql usando o nginx e o php-fpm para rodar nossa aplicação e o docker-compose para orquestrar nossos containers e links. Eu criei duas imagens uma para o nginx ja configurada para o cakephp e também para usar o php-fpm e outra para usar o cakephp e instalar todas as dependências que ele precisa para rodar incluindo o composer.
A primeira coisa que temos que fazer é instalar o docker e o docker-compose, não vou falar sobre isso pois tem milhares de tutoriais na internet, vou direto ao ponto. Vamos entrar na pasta onde esta nosso projeto cakephp e vamos criar um arquivo chamado docker-compose.yml como esse
O arquivo ficara como esse exemplo agora vou explicar um pouco ele.
Na linha 1 eu do um nome para a configuração do meu container que vai ser application depois dentro da configuração dele eu digo que ele vai usar a imagem waldemarnt/cakephp (que foi a imagem que eu criei com todas as coisas necessárias pra rodar o cakephp) e o parametro volumes eu digo que quero compartilhar todo o diretório onde criei o docker-compose.yml (root do projeto cake) com a pasta /var/www/cake-app (essa pasta é default a imagem espera que tenha esse nome se mudar não vai funcionar).
Na linha 6 vamos configurar o container de banco de dados que vai usar a imagem do mysql. O parametro ports faz o mapeamento das portas do container para a maquina host ou seja eu to dizendo que a porta 3306 do container vai rodar na porta 3306 da maquina host. A imagem do mysql precisa das variáveis de ambiente informando as configurações de conexão com o banco de dados como nome do banco, usuário e senha.
Na linha 15 vamos configurar o container do php-fpm usei a imagem do bitnami que é bem completa e relativamente pequena. No parametro volumes_from eu digo que quero vincular com os volumes do container application e o links eu digo que quero que ele crie uma rede com o container de db.
Na linha 23 configuramos o nginx que vai usar uma imagem que eu criei com as configurações necessárias para que o cakephp rode como url_rewrite. Ele vai expor a porta 80 vai linkar com nosso php-fpm que é responsável pelo php vai compartilhar dos volumes da aplicação e vai expor um volume de logs para que possamos acessar sem entrar no container.
Feito isso basta rodar o comando:
docker-compose up -d
Ele vai baixar as imagens, fazer os links necessários expor as portas e subir a aplicação corretamente. Para verificar se tudo esta rodando basta usar o seguinte comando que lista os containers ativos:
docker ps
E pronto, está no ar!
Como ja tem composer dentro da imagem da pra executar ele de fora diretamente dentro do container.
Abraço a todos, até a próxima.