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
porphp:7.4-
fpm ouphp: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
.
- Entre no container:
docker exec -it install-app \bash
- Crie a pasta do projeto:
mkdir ~/rjsites/agendaApi
- Navegue até a pasta do projeto:
cd agendaApi
- 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. 💙