Criando um LAMP com seu Docker

Standard

Bastante pessoas me pediram para eu criar uma documentação sobre como configurar um LAMP (Linux, Apache, Mysql e PHP) com o Docker.

lamp-docker

Para esse tutorial usaremos o Docker e Docker-compose, mas não entremos nos detalhes básicos sobre seu uso. Caso ainda não sabia usar essas ferramentas, apresento os links abaixo para aprender as ferramentas citadas:

Docker

Docker-compose

Para configurar um LAMP faremos o uso de um ambiente com dois containers.

Crie uma pasta para seu projeto e dentro dessa pasta crie um arquivo docker-compose.yml com o seguinte conteúdo:

web:
image: tutum/apache-php
ports:
– “80:80”
links:
– db
volumes:
– $PWD:/app

db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
MYSQL_DATABASE: lamp
MYSQL_USER: lamp_user
MYSQL_PASSWORD: lamp_pass

Perceba que o arquivo citado cria dois serviços, um chamado web, que usa a imagem padrão do tutum para ambientes com servidor web (apache) e interpretador php há embutido.

Essa imagem web tem a pasta /app como raiz do servidor web e no docker-compose.yml citado acima é criado um mapeamento da pasta onde você está para a pasta /app dentro do container, ou seja, tudo que estiver de arquivos html ou php será interpretado pelo servidor web na porta 80, que também foi mapeada no mesmo arquivo.

Ainda no serviço web fazemos referência de link para o serviço chamado “db”, ou seja, isso indica que sua aplicação deverá estar configurada para usar o hostname “db” e assim sua aplicação web poderá se conectar ao container mysql que será iniciado no serviço “db”.

No serviço db realizamos algumas configurações iniciais para facilitar nosso trabalho. Primeiro criamos uma senha do root do mysql, em seguida criamos um database inicial e um usuário e senha associado ao mesmo. Com posse de todos esses dados eu posso fazer minha aplicação conectar tranquilamente nesse banco, realizar toda configuração inicial do banco e viabilizar a solução completa.

Para iniciar esse ambiente, basta executar os comandos abaixo:

docker-compose up -d

Abra seu navegador e acesse o localhost (ou 192.168.99.100, caso seja MAC). Verá que o servidor web fará a interpretação das páginas que forem acessadas via url.

Caso queira acessar o console do mysql para realizar os comandos SQL manualmente, execute o seguinte comando:

docker exec -it <nome do container> mysql -u lamp_user  lamp -plamp_pass

Para obter o nome do container, basta executar o comando abaixo:

docker ps

  • Paulo C Zarpelon

    Teria como apontar para um Banco de Dados externo ao docker?

    • Teria sim. Sem problemas. Usei tudo no Docker para facilitar o entendimento e mostrar que é possível armazenar tudo nesse ambiente.

      • Paulo C Zarpelon

        Meu database/postgres é muito grande, por isso tem que ser externo. Não estou conseguindo A forma seria via link no docker-compose.yml ? não achei exemplos na internet… só achei “entre containers”.

        • Usar um database externo ao docker não precisa de nenhuma configuração no compose. Basta vc colocar sua aplicação com apontamento para a base externa e pronto 🙂

  • Pingback: Criando um LAMP com Docker - Peguei do()

  • Cálcio Heavy Metal

    Uma dúvida. A pasta app foi só um nome q usou para exemplificar. Certo? Seu eu quiser uma app em Yii2 por exemplo com o nome real da aplicação pode ser né?

    Outra dúvida, posso criar uma estrutura parecida com forrma tradicional? Criar uma pasta www e apontar o docker lá e coloaca todas as minhas apps web lá?

    • A pasta app foi só um exemplo mesmo. Pode usar a qual você quiser 🙂

      Sobre mapear o www é possível também 🙂