Conteinerizar um aplicativo se refere ao processo de adaptar um aplicativo e seus componentes com a finalidade de conseguir executá-lo em ambientes leves, conhecidos como contêineres. Esses ambientes são isolados e descartáveis e podem ser aproveitados para desenvolver, testar e implantar aplicativos para a produção.

Neste guia, usaremos o Docker Compose para conteinerizar um aplicativo Laravel para o desenvolvimento. Quando você tiver terminado, terá um aplicativo de demonstração Laravel funcionando em três contêineres de serviço separados:

  • Um serviço app executando o PHP7.4-FPM;
  • Um serviço de db executando o MySQL 5.7;
  • Um serviço de nginx que usa o serviço de app para analisar o código PHP, antes de entregar o aplicativo Laravel para o usuário final.

Para permitir um processo de desenvolvimento simplificado e facilitar a depuração do aplicativo, manteremos os arquivos do aplicativo sincronizados, usando volumes compartilhados. Também veremos como usar os comandos do docker-compose exec para executar o Composer e o Artisanno contêiner do app.

Pré-requisitos

Passo 1 — Obtendo o aplicativo Demo

Para começar, iremos buscar o aplicativo de demonstração do Laravel a partir de seu repositório do GitHub. Estamos interessados na ramificação tutorial-01, que contém o aplicativo básico do Laravel que criamos no primeiro guia dessa série.

Para obter o código do aplicativo compatível com este tutorial, baixe a versão tutorial-1.0.1para seu diretório home com:

cd ~
curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o travellist.zip

Vamos precisar do comando unzip para descompactar o código do aplicativo. Caso não tenha instalado este pacote antes, faça isso agora com:

sudo apt update
sudo apt install unzip

Agora, descompacte o conteúdo do aplicativo e renomeie o diretório descompactado para ter um acesso mais fácil:

unzip travellist.zip
mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo

Navegue até o diretório travellist-demo:

cd travellist-demo

No próximo passo, vamos criar um arquivo de configuração .env para configurar o aplicativo.

Passo 2 — Configurando o arquivo .env do aplicativo

Os arquivos de configuração do Laravel estão localizados em um diretório chamado config, dentro do diretório raiz do aplicativo. Além disso, um arquivo .env é usado para preparar a configuração dependente do ambiente, como credenciais e quaisquer informações que possam variar entre as implantações. Este arquivo não está incluído no controle de revisão.

Aviso: o arquivo de configuração de ambiente contém informações confidenciais sobre o seu servidor, incluindo credenciais para o banco de dados e chaves de segurança. Por esse motivo, nunca compartilhe este arquivo publicamente.

Os valores contidos no arquivo .env terão precedência sobre os valores definidos nos arquivos de configuração regulares, localizados no diretório config. Cada instalação em novo ambiente exige um arquivo de ambiente personalizado para definir coisas como as configurações da conexão com o banco de dados, as opções de depuração, o URL do aplicativo, entre outros itens que possam variar, dependendo do ambiente em que o aplicativo esteja funcionando.

Agora, vamos criar um novo arquivo .env para personalizar as opções de configuração do ambiente de desenvolvimento que estamos preparando. O Laravel vem com um exemplo do arquivo .env que podemos copiar para criar o nosso:

cp .env.example .env

Abra este arquivo usando o nano ou outro editor de texto de sua escolha:

nano .env

O arquivo .env atual do aplicativo demo travellist contém as configurações para usar um banco de dados local do MySQL, com o 127.0.0.1 como o host do banco de dados. Precisamos atualizar a variável DB_HOST para que ela aponte para o serviço de banco de dados que vamos criar em nosso ambiente do Docker. Neste guia, vamos chamar nosso serviço de banco de dados de db. Vá em frente e substitua o valor listado de DB_HOST pelo nome do serviço de banco de dados:

.env

APP_NAME=Travellist
APP_ENV=dev
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost:8000

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password
...

Caso queira, sinta-se à vontade para alterar o nome do banco de dados, nome de usuário e senha. Essas variáveis serão aproveitadas em um próximo passo, onde iremos definir o arquivo docker-compose.yml para configurar nossos serviços.

Salve o arquivo quando terminar de editar. Caso tenha utilizado o nano, faça isso pressionando Ctrl+x, e então Y e Enter para confirmar.

Passo 3 — Configurando o Dockerfile do aplicativo

Embora ambos os nossos serviços do MySQL e do Nginx se baseiem em imagens padronizadas, obtidas a partir do Docker Hub,ainda precisaremos compilar uma imagem personalizada para o contêiner do aplicativo. Criaremos um novo Dockerfile para isso.

Nossa imagem do travellist irá basear-se na imagem oficial do PHPphp:7.4-fpm​​​ do Docker Hub. Além desse ambiente básico do PHP-FPM, instalaremos alguns módulos adicionais do PHP e a ferramenta de gerenciamento de dependência do Composer.

Também iremos criar um novo usuário do sistema; isso é necessário para executar comandos do artisan e do composer durante o desenvolvimento do aplicativo. A configuração uid garante que o usuário dentro do contêiner tenha o mesmo uid que seu usuário do sistema em sua máquina do host, para o qual está executando o Docker. Desta forma, quaisquer arquivos criados por esses comandos são replicados no host com as permissões corretas. Isso também significa que você poderá usar o editor de códigos de sua escolha no computador host para desenvolver o aplicativo que está executando dentro dos contêineres.

Crie um novo Dockerfile com:

nano Dockerfile

Copie os seguintes conteúdo para seu Dockerfile:

Dockerfile

FROM php:7.4-fpm

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# Install system dependencies
RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Set working directory
WORKDIR /var/www

USER $user

Não se esqueça de salvar o arquivo quando terminar.

Nosso Dockerfile começa pela definição da imagem base que estamos usando: php:7.4-fpm.

Após instalar os pacotes do sistema e as extensões do PHP, instalaremos o Composer, copiando o executável composer de sua última imagem oficial para nossa imagem do aplicativo.

Então, um novo usuário do sistema é criado e configurado usando os argumentos user e uid que foram declarados no início do Dockerfile. Esses valores serão injetados pelo Docker Compose no momento da compilação.

Por fim, definimos o dir padrão em funcionamento como /var/www e trocamos para o usuário recém criado. Isso garantirá que, ao executar os comandos do composer e do artisan no contêiner do aplicativo, você esteja se conectando como um usuário comum e que esteja no diretório correto.

#laravel #conteinerizar #conhecidos

Como instalar e configurar o Laravel com o Docker Compose no Ubuntu 20.04
8.15 GEEK