Using Docker with Node.js During Development
Guide from official docker1 docs was sufficient to get this going.
Prerequisites
Create a Docker Image
# Dockerfile.dev
FROM node:20-alpine
RUN npm install -g pnpm
WORKDIR /app
COPY package.json package.json
# Was using pnpm workspaces, you can copy the lock file w.r.t your package manager
COPY package-lock.json package-lock.json
RUN pnpm install
COPY . .
EXPOSE 8080
CMD ["pnpm", "run", "dev"]
Run a container from the image
# docker-compose.dev.yml
services:
users:
container_name: users
build:
context: .
dockerfile: Dockerfile.dev
ports:
- '8080:8080'
env_file:
- .env
depends_on:
db:
condition: service_healthy
networks:
users:
ipv4_address: 172.18.0.3
db:
container_name: db
image: postgres
restart: always
volumes:
- db-data:/var/lib/postgresql/data
user: postgres
environment:
- PGUSER=postgres
- POSTGRES_DB=app_name
- POSTGRES_PASSWORD=postgres
ports:
- '5432:5432'
healthcheck:
test: ['CMD', 'pg_isready']
interval: 10s
timeout: 5s
retries: 5
networks:
users:
ipv4_address: 172.18.0.2
volumes:
db-data:
networks:
users:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
gateway: 172.18.0.1
Running the container
$ docker compose -f docker-compose.dev.yml up --build
Notes
Since I used for development purpose, I addded .dev
extension to each for clear separation of what it's being used for.
For production docker images I prefer to directly use Dockerfile
and docker-compose.yml
instead.
Other References
- How to Set Up Your Local Node.js Development Environment Using Docker
- How To Build a Node.js Application with Docker