RJ Sites

🐳 Criando um Ambiente Docker para Instalação do Laravel com Versão de PHP Personalizada

Cansei de ficar trocando a versão do PHP no WSL! Se você também trabalha com múltiplos projetos PHP com versões diferentes, esse tutorial é pra você.

📌 Introdução

Se você, assim como eu, vive criando novos projetos PHP/Laravel com versões variadas do PHP (7.4, 8.1, 8.3…), sabe o quanto pode ser chato manter várias versões do PHP no mesmo sistema.

Pensando nisso, decidi criar um ambiente isolado com Docker, apenas para instalar o Laravel com a versão correta do PHP via Composer. Assim, cada projeto roda com o que precisa, sem conflitos. Neste tutorial, vou te mostrar como configurar esse ambiente do zero.

Ah, e se você ainda não tem o Docker instalado no seu WSL2, confere meu outro post:
👉 Como instalar o Docker no WSL2 com Windows (link em breve)

⚙️ 1. Definindo o local de instalação do Laravel

Crie uma pasta separada apenas para esse ambiente de instalação do Laravel. Isso evita conflito com os seus projetos.

No meu caso, eu uso a estrutura:

~/rjsites/docker

Já os projetos Laravel ficam em:

~/rjsites/

🛠️ 2. Criando o Dockerfile

Dentro da pasta ~/rjsites/docker, crie um arquivo chamado Dockerfile com o conteúdo abaixo:

FROM php:8.1-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

#Install node & npm
RUN apt-get update && apt-get install -y \
    nodejs \
    npm

# 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

🧠 Dica: Troque php:8.1-fpm por php:7.4-fpm ou php:8.3-fpm se quiser outra versão.

📄 3. Criando o docker-compose.yml

No mesmo diretório, crie um arquivo docker-compose.yml com o conteúdo:

version: '3.8'
services:
  app:
    build:
      args:
        user: ubuntuwsl
        uid: 1000
      context: ./
      dockerfile: Dockerfile
    image: install
    container_name: install-app
    working_dir: /var/www/
    volumes:
      - ~/rjsites/:/var/www

Aqui o volume ~/rjsites/:/var/www mapeia a pasta principal (rjsites/) no container. Isso é importante para que os projetos sejam criados diretamente do seu sistema de arquivos.

🚀 4. Buildando e subindo o ambiente

Agora, vamos compilar o ambiente Docker e iniciar o container:

docker compose build
docker compose up -d

📂 5. Criando seu projeto Laravel

Vamos supor que você quer criar um projeto chamado agendaApi.

  1. Entre no container:
docker exec -it install-app \bash
  1. Crie a pasta do projeto:
mkdir ~/rjsites/agendaApi
  1. Navegue até a pasta do projeto:
cd agendaApi
  1. Rode o comando para instalar o Laravel:
  • Para uma versão específica:
composer create-project --prefer-dist laravel/laravel . "10.1"
  • Para a última versão disponível:
composer create-project laravel/laravel .

✅ Pronto!

O Laravel foi instalado com sucesso na pasta agendaApi.

🧩 Lembrando: este container é apenas para instalação do Laravel via Composer. Para rodar seu projeto, não use este mesmo Dockerfile.

Você precisa de um ambiente com Nginx + PHP + MySQL + Redis, e eu te mostro como montar isso em outro tutorial:
👉 Como subir seu ambiente Laravel com Docker (PHP, Nginx, MySQL e Redis) (em breve)

🐞 Possíveis problemas

Você pode ter problemas de permissão dentro do container quando tentar criar a pasta para o seu projeto.

Uma maneira eficiente de resolver esse problema é criar a paste pelo WSL2 e dar permissão geral (famoso chmod 777). Assim o container vai poder criar, editar, ver e executar arquivos dentro da nova pasta, para isso execute o seguinte comando fora do container.

cd ~/rjsites/

mkdir agendaApi

chmod 777 agendaApi

Após exeutar esses comandos, entre novamente no container e agora sim, execute o comando para instalar o Laravel dentro da pasta com as permissões.

💬 Conclusão

Esse setup me salvou tempo e dores de cabeça com versões de PHP conflitantes. Você pode usar esse container sempre que quiser iniciar um novo projeto Laravel — com a versão certa do PHP, rapidinho.

Se te ajudou, compartilha com alguém ou salva esse link pra futuras consultas. 💙

O que é Git?

Se você ainda não sabe exatamente o que é, aqui eu te explico de forma simples o que é, pra que serve e como equipes

Leia mais »