Contents
Neste artigo explicarei um pouco sobre o Docker e demonstrarei na prรกtica como criar um ambiente de desenvolvimento LAMP, stack web que utiliza as tecnologias Apache, PHP e MySQL como base para rodar sua aplicaรงรฃo.
O Docker รฉ uma plataforma que permite automatizar o processo de criaรงรฃo, implantaรงรฃo e execuรงรฃo de aplicativos dentro de contรชineres. Ele basicamente simplifica o desenvolvimento e a implantaรงรฃo de aplicativos, fornecendo uma maneira consistente de empacotar o cรณdigo, bibliotecas e outras dependรชncias necessรกrias em um contรชiner isolado.
Portanto quando vocรช possui um aplicativo configurado em Docker, ele irรก funcionar de maneira consistente, independentemente do ambiente em que estรก sendo executado.
O Docker Compose รฉ uma ferramenta complementar ao Docker que permite definir e executar aplicativos multi-contรชiner em um รบnico ambiente e neste artigo iremos utilizar essa ferramenta.
Para vocรช criar um ambiente em Docker utilizando o docker-compose vocรช precisarรก somente de uma pasta com dois arquivos dentro dela apenas, sendo eles o Dockerfile e docker-compose.yml.
O Dockerfile ele descreve o ambiente de execuรงรฃo do contรชiner, incluindo quaisquer dependรชncias, configuraรงรตes de ambiente e comandos necessรกrios para configurar o ambiente do aplicativo dentro do contรชiner e o docker-compose.yml รฉ o arquivo de configuraรงรฃo usado pelo Docker Compose para definir, configurar e gerenciar aplicativos compostos por mรบltiplos contรชineres.
O Docker disponibiliza um hub em nuvem que possรญvel encontrar imagens oficiais e feitas por colaboradores dos aplicativos atravรฉs desse link: https://hub.docker.com/
Vamos logo ao que interessa, vamos montar nossa stack LAMP utilizando o Docker e Docker-Compose!
Primeiramente vocรช precisa fazer o download e a instalaรงรฃo do Docker em seu ambiente, portando acesse o site oficial e faรงa o procedimento necessรกrio: https://www.docker.com/products/docker-desktop
Sendo assim, vamos criar uma pasta com o nome docker-lamp e dentro dela criaremos os arquivos Dockerfile e docker-compose.yml inicialmente.
ร possรญvel configurar essa stack de diversas maneiras utilizando as imagens e configurando o arquivo docker-compose.yml, mas eu particularmente gosto de de configurar dois containers distintos: sendo o primeiro o ambiente Linux jรก com o Apache e o PHP configurado com todas as dependรชncias necessรกrias diretamente na execuรงรฃo do Dockerfile e o segundo รฉ o banco de dados em MySQL atravรฉs da imagem oficial configurado no docker-compose.yml.
Como bรดnus tambรฉm irei criar um terceiro container com o phpMyAdmin utilizando sua imagem oficial que tem a funรงรฃo de gerenciador do banco de dados com uma interface grรกfica. Mas ele รฉ completamente desnecessรกrio.
No arquivo Dockerfile simplesmente utilizaremos bash como linguagem, portanto vamos configura-lo da seguinte maneira:
# Utilizaremos Ubuntu como SO
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
# Update do linux e instalaรงรฃo de dependรชncias
RUN apt-get update && apt-get install -y
RUN apt-get install software-properties-common -y
RUN add-apt-repository ppa:ondrej/php
# Instalaรงรฃo do Apache, PHP, plugins do PHP e softwares necessรกrios
RUN apt-get install -y build-essential \
nano \
unzip \
curl \
locales \
apache2 \
php8.1 \
php8.1-common \
php8.1-mysql \
php8.1-xml \
php8.1-xmlrpc \
php8.1-curl \
php8.1-gd \
php8.1-imagick \
php8.1-cli \
php8.1-dev \
php8.1-imap \
php8.1-mbstring \
php8.1-opcache \
php8.1-soap \
php8.1-zip \
php8.1-intl \
php8.1-bcmath \
php8.1-pgsql \
php8.1-pspell \
libapache2-mod-php8.1 \
&& apt-get clean
RUN locale-gen pt_BR.UTF-8
# Instala o Composer para o PHP
RUN cd /usr/local/lib/ && curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer
# Instala o CA Certificates para futura configuraรงรฃo SSL
RUN apt-get install --reinstall ca-certificates -y
# Cria a pasta src, que รฉ a pasta onde ficarรก sua aplicaรงรฃo
ADD src/ /var/www/html/src
# Seta as permissรตes da pasta src
RUN chown $USER:www-data -R /var/www/html/src
RUN chmod u=rwX,g=srX,o=rX -R /var/www/html/src
RUN find /var/www/html/src -type d -exec chmod g=rwxs "{}" \;
RUN find /var/www/html/src -type f -exec chmod g=rws "{}" \;
# Ativa Apache mod_rewrite
RUN a2enmod rewrite
RUN a2enmod actions
# Altera AllowOverride de None para All
RUN sed -i '170,174 s/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf
# Inicia o Apache
RUN service apache2 restart
# Expรตe as portas necessรกrias
EXPOSE 80 8080 3306
# Roda o apache fulltime
ENTRYPOINT ["apache2ctl", "-D", "FOREGROUND"]
Agora vamos configurar o arquivo docker-compose.yml para rodar o Dockerfile e adicionar a imagem do banco de dados para rodar um segundo container MySQL e do phpMyAdmin para o rodar o terceiro, vamos lรก:
# Configura a versรฃo do compose
version: '3.9'
# Em services definiremos nossos containers
services:
# App รฉ nosso primeiro container que contรฉm o Apache e o PHP confiugrado no Dockerfile
app:
container_name: docker-lamp
build: .
# Porta exposta para o Apache
ports:
- "80:80"
# Facilitando as configuraรงรตes os volumes sรฃo os alias de pastas e arquvivos do Apache e PHP para pasta do docker-compose
volumes:
- ./src:/var/www/html/src
- ./config/php.ini:/etc/php/8.1/apache2/php.ini
- ./config/000-default.conf:/etc/apache2/sites-available/000-default.conf
- ./config/apache2.conf:/etc/apache2/apache2.conf
- ./logs/apache2:/var/log/apache2
# Configuraรงรฃo do uso de recursos da virtualizaรงรฃo
deploy:
resources:
limits:
cpus: '2'
memory: 12G
# mysql รฉ nosso segundo container que contรฉm a imagem oficial do Mysql
mysql:
# Imagem do MySQL do Docker Hub
image: mysql:latest
container_name: mysql
# Configuraรงรตes de acesso e db do mysql
environment:
MYSQL_ROOT_PASSWORD: 'senha-root'
MYSQL_DATABASE: banco-de-dados
MYSQL_USER: user
MYSQL_PASSWORD: 'user-senha'
restart: always
command: --default-authentication-plugin=mysql_native_password
# Porta exposta para o MySQL
ports:
- "3306:3306"
# Facilitando as configuraรงรตes os volumes sรฃo os alias de pastas e arquvivos do MySQL para pasta do docker-compose
volumes:
- ./config/my.cnf:/etc/mysql/conf.d/my.cnf
- ./database:/var/lib/mysql
- ./logs/mysql:/var/log/mysql
# Configuraรงรฃo do uso de recursos da virtualizaรงรฃo
deploy:
resources:
limits:
cpus: '2'
memory: 12G
# phpmyadmin รฉ nosso terceiro container que contรฉm a imagem oficial do phpmyadmin
phpmyadmin:
# Imagem do phpMyAdmin do Docker Hub
image: phpmyadmin:latest
container_name: phpmyadmin
# Configuraรงรตes de link do banco de dados com o phpMyAdmin
links:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3306
PMA_ARBITRARY: 1
UPLOAD_LIMIT: 300M
restart: always
# Porta exposta para o uso phpMyAdmin
ports:
- 8080:80
Vendo os cรณdigos podemos observar que de acordo com as nossas configuraรงรตes no Dockerfile e docker-compose-yml serรก necessรกrio criar mais algumas pastas dentro da nossa docker-lamp para finalizar nossa configuraรงรฃo, a estrutura da pasta ficarรก assim:
De qualquer maneira no final desse artigo vou disponibilizar o repositรณrio desse projeto no GitHub com todos os arquivos.
Pronto! Toda a configuraรงรฃo do nosso ambiente em Docker estรก devidamente aplicada, agora nรณs devemos apenas dar um build (complilar) na nossa pasta do docker-lamp e apรณs isso dar um up (start) em nossos containers para ver nossa aplicaรงรฃo rodando.
Para isso basta acessar a nossa pasta docker-lamp abrir seu terminal e rodar os seguintes comandos:
docker-compose build
Com isso ele irรก compilar nossos nosso ambiente em docker-compose, esse processo pode demorar alguns minutos, apรณs isso basta rodar o seguinte comando:
docker-composer up -d
Esse comando irรก criar os containers e dar start no ambiente e colocando nossa aplicaรงรฃo online, a variรกvel -d รฉ para rodar em segundo plano.
Agora basta vocรช colocar sua aplicaรงรฃo na pasta src e acessa-la via web.
Repositรณrio no GitHub: https://github.com/matsesso/docker-lamp
ร isso aรญ! Espero que esse artigo contribua a vocรช.
[fluentform id="8"]