This example contains everything needed to get a Next.js development and production environment up and running with Docker Compose.
- Develop locally without Node.js or TypeScript installed ✨
- Easy to run, consistent development environment across macOS, Windows, and Linux teams
- Run multiple Next.js apps, databases, and other microservices in a single deployment
- Multistage builds combined with Output Standalone outputs up to 85% smaller apps (Approximately 110 MB compared to 1 GB with create-next-app)
- Easy configuration with YAML files
Install Docker Desktop for Mac, Windows, or Linux. Docker Desktop includes Docker Compose as part of the installation.
Run cd nextjs
, then run pnpm install
to generate a lockfile.
First, run the development server:
# Create a network, which allows containers to communicate
# with each other, by using their container name as a hostname
docker network create next_network
# Up dev in detached mode. To stop, see the "Useful commands" section
docker compose -f docker-compose.dev.yml up -d --build
# See logs
docker logs -f $(docker ps -aq)
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying pages/index.tsx
. The page auto-updates as you edit the file.
Multistage builds are highly recommended in production. Combined with the Next Output Standalone feature, only node_modules
files required for production are copied into the final Docker image.
First, run the production server (Final image approximately 110 MB).
# Create a network, which allows containers to communicate
# with each other, by using their container name as a hostname
docker network create next_network
# Build prod
docker compose -f docker-compose.prod.yml build
# Up prod in detached mode
docker compose -f docker-compose.prod.yml up -d
Alternatively, run the production server without without multistage builds (Final image approximately 1 GB).
# Create a network, which allows containers to communicate
# with each other, by using their container name as a hostname
docker network create next_network
# Build prod without multistage
docker compose -f docker-compose.prod-without-multistage.yml build
# Up prod without multistage in detached mode
docker compose -f docker-compose.prod-without-multistage.yml up -d
Open http://localhost:3000.
# Stop all running containers
docker kill $(docker ps -aq) && docker rm $(docker ps -aq)
# Free space
docker system prune -af --volumes