:::: MENU ::::

Rodando CakePHP com docker-compose, nginx e mysql

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

 

Screen Shot 2016-03-04 at 3.58.14 PM

 

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

Screen Shot 2016-03-04 at 4.19.47 PM

 

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.

 


  • Rodrigo Damacena

    Muito bacana o tutorial, executei os mesmos comandos aqui para entender um pouco mais e funcionou.
    Fiz o acesso via localhost pelo navegador e mostrou o Nginx, mais e ai.. aqui mostra 4 containers, uau, eu tinha pensado no máximo 2, um para um Ubuntu por exemplo com Apache ou Nginx e PHP e um separado para MySQL, o para o banco de dados eu poderia usar para outros containers, agora contigo são 4, pode comentar o porque?

    E agora? É usar e tal, só jogar os files e sair programando?
    Enfim, achei muito top mais confesso que estou meio perdido.

    Mais parabéns!

  • Alex Kleinubing

    Hello. O que seria “todas as coisas necessárias para rodar o CakePHP” da imagem waldemarnt/cakephp? Seria o PHP e as extensões apenas?
    Tentei olhar o conteúdo no Docker Hub, mas esta sem descrição.