docker build --no-cache -t tdd-exercises:latest . && docker run -it --rm tdd-exercises
-
build image:
docker build -t tdd-exercises:latest .
-
run tests:
docker run -it --rm tdd-exercises
- build image and run tests:
docker compose up --build
Utilizo do multistage build do docker para, em uma imagem intermediária baseada na imagem do composer, copiar os arquivos de desenvolvimento do projeto. Nessa imagem intermediária, com o composer que veio da imagem do composer, faço a instalação das dependências.
Em um outro estágio que é o da imagem final, utilizando como base a imagem de cli do php em cima do alpine linux, apenas copio o binário do composer e toda a pasta da aplicação que teve as dependencias instaladas pela etapa baseada na imagem do composer.
Isso torna a imagem final muito mais leve e evita que seja necessário fazer bind do volume da pasta vendor por exemplo. Também deixa a aplicação completamente isolada, além de evitar que a vendor esteja ocupando espaço tanto no container quanto no host.
- como contornar erro do php unit que fala que uma classe não pode ser dublada por ser final? PHPUnit\Framework\MockObject\Generator\ClassIsFinalException: Class "TddExercises\Freight\User" is declared "final" and cannot be doubled