Skip to content
>_devvkit
$devvkit learn --librarie docker-guide

Docker Guide

[containers][devops][deployment][cli]
Universal
Install
# macOS / Windows
# Download from https://docker.com/products/docker-desktop

# Linux
curl -fsSL https://get.docker.com | sh

Docker changed how we ship software. Instead of "it works on my machine," you get a reproducible environment defined in a Dockerfile.

A container shares the host kernel, starting in milliseconds and using far fewer resources than a VM.

Images

Pull an imageDownload a pre-built image.
docker pull node:20-slim
List imagesShow downloaded images.
docker images
Build an imageBuild from a Dockerfile.
docker build -t my-app:latest .
Remove an imageDelete an image.
docker rmi node:20-slim

Containers

Run a containerStart a container from an image.
docker run -d -p 3000:3000 --name my-app my-app:latest
Run interactivelyStart with a shell for debugging.
docker run -it node:20-slim /bin/bash
List containersShow running containers.
docker ps
Stop a containerGracefully stop.
docker stop my-app
View logsFollow logs from a container.
docker logs -f my-app
Exec in containerRun command in running container.
docker exec -it my-app /bin/bash

Dockerfile

DockerfileMulti-stage build for Node.js.
FROM node:20-slim AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/index.js"]

Docker Compose

Docker ComposeDefine multi-container app.
version: "3.9"
services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:16-alpine
Compose upLaunch all services.
docker compose up -d

Cleanup

System pruneRemove all unused resources.
docker system prune -a --volumes