Introdução

Docker é uma ferramenta usada para criar contêineres para aplicativos. Esses contêineres são usados ​​para empacotar aplicativos para que possam funcionar sem problemas em qualquer ambiente (ou sistema operacional), sem a necessidade de qualquer instalação ou configuração especial.

Sail fornece à sua aplicação Laravel um ambiente de desenvolvimento Docker. Com ele, você não precisa criar manualmente um contêiner Docker para seu aplicativo Laravel. Ele fornecerá a você um ambiente de desenvolvimento local que consiste em PHP, MySQL e Redis por padrão, embora você possa selecionar o serviços específicos que você deseja . Isso significa que os desenvolvedores do Laravel não precisam mais fazer nenhuma configuração especial (como instalar PHP, MySQL, um servidor local, etc.) em seu sistema operacional para começar a construir um aplicativo Laravel. Com o Sail, eles podem começar a correr.

Outra vantagem que o Sail apresenta é que os desenvolvedores não precisam se preocupar em ter as versões corretas do software de configuração instaladas em seu sistema. Com um contêiner Sail, se houver uma quebra devido à compatibilidade, você pode simplesmente deletar o contêiner e criar um novo, todo contido fora do seu ambiente local e sem deixar pegadas nele.

Se você estiver colaborando com outros desenvolvedores em um projeto, o Sail tornará o compartilhamento fácil e direto, pois não haverá necessidade de levar em consideração os sistemas operacionais que os outros desenvolvedores usam.

Sail segue uma longa lista de tentativas de um ambiente de desenvolvimento Laravel como Homestead , Valet , Laragon , Takeout , Laradock e Embarcação .

O pacote inteiro é composto de dois arquivos: um arquivo docker-compose.yml que contém os contêineres do Docker do seu aplicativo e um script Sail que fornece uma CLI para interagir com esses contêineres. O arquivo docker-compose.yml está localizado no diretório raiz do seu projeto, enquanto o script Sail está localizado no diretório vendor/bin.

Neste artigo, aprenderemos como instalar e fazer uso do Laravel Sail. Vamos criar um novo projeto e dar uma olhada em alguns comandos essenciais do Sail.

Pré-requisitos

O único requisito do Sail é que o Docker esteja instalado no sistema operacional em que será executado.

Se você usa Windows , você precisará instalar e habilitar o subsistema Windows para Linux 2 (WSL2). Ele permitirá que você execute executáveis ​​binários do Linux nativamente em seu sistema operacional Windows. Além disso, certifique-se de configurar o Docker Desktop para usar o back-end WSL2 .

Caso contrário, nenhuma experiência Docker é necessária.

Etapa 1: Instalação e configuração do Sail

Cada novo aplicativo do Laravel vem com o Sail fora da caixa. Requer apenas um comando simples para girá-lo.

Execute o seguinte comando para criar um novo aplicativo Laravel:

 curl-s https://laravel.build/new-sail-application | bash

O comando acima cria o projeto em um novo diretório chamado new-sail-application . Sinta-se à vontade para renomear com o nome que quiser para o seu projeto.

Captura de tela de Instalação do Laravel Sail
Em seguida, navegue até o diretório do projeto:

 cd new-sail-application

Para iniciar o Sail, execute o seguinte comando:

./vendor/bin/sail up
Captura de tela do Laravel Sail New Project Startup 

Adicionando Sail a um aplicativo existente

Você também pode instalar o Sail em um aplicativo existente usando o Composer, assumindo que seu ambiente de desenvolvimento local esteja configurado para usá-lo:

 composer requer laravel/sail--dev

Assim que a instalação for concluída, você pode publicar o arquivo docker-compose.yml do Sail no diretório do seu projeto usando o seguinte comando:

 php artisan sail: install

Por último, para iniciar o Sail, execute o seguinte comando:

./vendor/bin/sail up

Etapa 2: Analisando atentamente seu aplicativo

Agora seu ambiente de desenvolvimento está instalado e funcionando. Com o Docker, cada contêiner contém apenas um serviço. Isso significa que nosso aplicativo Sail vem com três serviços: um para PHP, um para MySQL e um terceiro para Redis.

Esses três contêineres são hospedados e gerenciados por Docker Compose , usando o docker-compose.yml arquivo na raiz do seu projeto. Se você abrir este arquivo, verá uma seção services com três componentes: laravel.test , mysql e redis :

Captura de tela do ambiente de programação Docker

laravel.test lida com o componente PHP e os outros dois lidam com o que seus nomes sugerem.

No serviço mySQL (este serviço gerencia seu banco de dados), você encontrará o parâmetro image , que indica a imagem que este contêiner está instanciando. Basicamente, uma imagem é como a planta de uma casa, enquanto o contêiner é a própria casa construída. A versão do MySQL a ser instalada (8.0) também é especificada:

 mysql: imagem:'mysql: 8.0' portas: -'$ {FORWARD_DB_PORT:-3306}: 3306' meio Ambiente: MYSQL_ROOT_PASSWORD:'$ {DB_PASSWORD}' MYSQL_DATABASE:'$ {DB_DATABASE}' MYSQL_USER:'$ {DB_USERNAME}' MYSQL_PASSWORD:'$ {DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD:'sim' volumes: -'sailmysql:/var/lib/mysql' redes: -velejar exame de saúde: teste: ["CMD","mysqladmin","ping"]

Todas as imagens de que precisamos são provenientes do Docker Hub , a maior biblioteca de imagens da rede. Eles vêm com alguma documentação explicando como usá-los. Verifique a documentação do MySQL aqui .

O parâmetro portas é usado para sincronizar a porta do contêiner e a porta local. DB_PORT:-3306 é sua porta local e a linha $ {FORWARD_DB_PORT:-3306}: 3306 a sincroniza com a porta do seu contêiner.

No ambiente , as credenciais do seu banco de dados são definidas. No momento, eles estão apontando para valores no arquivo .env localizado no diretório raiz do seu projeto.

O Docker usa volumes para persistir (ou salvar) os dados usados ​​por um contêiner (mesmo depois que o contêiner é destruído). Externalizar dados ou mantê-los fora de um contêiner é importante por uma série de razões.

Os contêineres, por design, são criados para serem temporários. Como tal, quando eles travam ou param, todos os dados que eles mantêm são perdidos. Quando os dados são gravados em um volume e o contêiner ao qual pertencem é encerrado, os dados permanecem e podem ser usados ​​por um novo contêiner. Os dados persistentes também podem ser compartilhados por vários contêineres em máquinas diferentes.

A linha volumes:-'sailmysql:/var/lib/mysql' simplesmente usa um volume chamado sailmysql para salvar todos os dados no var diretório/lib/mysql (é onde nossos dados MySQL são armazenados).

Todos os serviços em nosso contêiner devem estar conectados à mesma rede para funcionarem juntos. O parâmetro networks especifica qual rede interna seu contêiner deve usar, neste caso, sail .

Por último, o parâmetro health especifica os comandos que o Docker deve executar para verificar a integridade do seu contêiner e garantir que esteja funcionando conforme o esperado.

Se você der uma olhada no serviço laravel.test , o parâmetro que vem primeiro é build . Ele aponta para um Dockerfile localizado em ./vendor/laravel/sail/runtimes/8.0 . Este Dockerfile foi criado pela equipe do Laravel e contém instruções para construir a imagem de que precisamos aqui, então não instanciaremos nenhuma imagem do Docker Hub:

 laravel.test: construir: contexto:./vendor/laravel/sail/runtimes/8.0 dockerfile: Dockerfile args: WWWGROUP:'$ {WWWGROUP}' imagem: sail-8.0/app portas: -'$ {APP_PORT:-80}: 80' meio Ambiente: WWWUSER:'$ {WWWUSER}' LARAVEL_SAIL: 1 volumes: -'.:/var/www/html' redes: -velejar depende de: -mysql -redis -selênio

O parâmetro image aponta para a imagem a ser instanciada. Neste caso, aquele criado por build . ports mapeia nosso contêiner e as portas locais juntas. ambientes aponta para credenciais a serem usadas em nosso código PHP. volumes é usado para salvar dados PHP relevantes que não desejamos perder, e redes especifica a rede interna à qual este serviço deve ser conectado.

O parâmetro depends_on especifica quais serviços devem estar ativos e em execução antes que nosso aplicativo possa ser iniciado. Nosso aplicativo depende de mysql , redis e selênio .

O último serviço, redis , é semelhante ao serviço mysql :

 redis: imagem:'redis: alpine' portas: -'$ {FORWARD_REDIS_PORT:-6379}: 6379' volumes: -'sailredis:/data' redes: -velejar exame de saúde: teste: ["CMD","redis-cli","ping"]

Primeiro, uma imagem Redis é instanciada. Em seguida, nosso contêiner e portas locais são sincronizados. Usamos um volume para salvar nossos dados do Redis, definir a rede interna à qual esse serviço deve ser conectado e realizar uma verificação de integridade para garantir que nosso contêiner esteja funcionando corretamente.

Etapa 3-Experimentar alguns comandos Sail

Por padrão, para executar os comandos do Sail, a linha vendor/bin/sail deve preceder os comandos. Podemos, no entanto, configurar um alias de bash que seja apenas uma palavra para tornar nossos comandos mais curtos.

Basicamente, substituiremos a linha vendor/bin/sail pela palavra vela :

 alias sail='bash vendor/bin/sail'

Para executar todos os contêineres em nosso arquivo docker-compose.yml e iniciar nosso aplicativo, usamos o seguinte comando:

 navegar para cima

Para iniciar os contêineres em segundo plano, usamos:

 navegar para cima-d

Assim que seu aplicativo estiver instalado e funcionando, você pode visitar http://localhost para visualizá-lo.

Para interromper os contêineres, pressione Control + C no teclado. Se eles estiverem sendo executados em segundo plano, execute:

 navegar para baixo

Ao executar os comandos artisan , composer e npm , o alias sail deve preceder os comandos.

Por exemplo, em vez de executar:

 php artesão migrar

Você administra:

 artesão da vela migrar

E em vez de correr:

 compositor requer laravel/sanctum

Você administra:

 compositor de vela requer laravel/santuário

Conclusão

Você chegou ao final do tutorial! Conseguimos criar e configurar um novo aplicativo Sail. Lemos o arquivo docker-compose.yml do Sail e aprendemos como os contêineres são configurados. Também aprendemos alguns comandos essenciais para executar nosso aplicativo Sail. Mas sempre há mais para saber! Para saber mais sobre o Sail, verifique a documentação oficial aqui .

A postagem Laravel e Docker: A guia para usar o Laravel Sail apareceu primeiro no LogRocket Blog .