AgentSheet
Back
🐳

Docker

devopscontainerscli

Container Lifecycle

CommandDescription
docker run [OPTIONS] IMAGE [CMD]Create and start container
docker start CONTAINERStart stopped container
docker stop CONTAINERStop running container
docker restart CONTAINERRestart container
docker rm CONTAINERRemove stopped container
docker exec -it CONTAINER CMDRun command in running container
docker logs CONTAINERView container logs
docker run -d -p 8080:80 --name web nginx
docker exec -it web /bin/sh
docker logs -f web

Images

CommandDescription
docker build -t NAME:TAG .Build image from Dockerfile
docker pull IMAGEPull image from registry
docker push IMAGEPush image to registry
docker tag SOURCE TARGETTag image
docker rmi IMAGERemove image
docker images / docker image lsList images
docker build -t myapp:latest .
docker tag myapp:latest myregistry/myapp:v1

Dockerfile Instructions

InstructionPurpose
FROM image[:tag]Base image
RUN cmdExecute command (creates layer)
COPY src destCopy files (prefer over ADD)
ADD src destCopy + extract archives
WORKDIR pathSet working directory
EXPOSE portDocument port (no publish)
CMD ["exec","arg"]Default command (overridable)
ENTRYPOINT ["exec"]Fixed entry (always runs)
ENV KEY=valueEnvironment variable
ARG VAR=defaultBuild-time variable
VOLUME ["path"]Mount point
HEALTHCHECKContainer health check
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]

Multi-stage Builds

FROM node:20 AS builder
WORKDIR /app
COPY . .
RUN npm run build

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

Docker Compose

CommandDescription
docker compose up -dStart services in background
docker compose downStop and remove containers
docker compose psList services
docker compose logs -f [SERVICE]Follow logs
docker compose exec SERVICE CMDRun command in service
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
  db:
    image: postgres:16
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: secret

volumes:
  postgres_data:

networks:
  default:
    driver: bridge

Volumes

CommandDescription
docker volume create NAMECreate volume
docker volume lsList volumes
docker volume rm NAMERemove volume
docker volume ls -qQuiet (IDs only)
docker run -v my_data:/data alpine
docker run -v $(pwd)/data:/data alpine  # bind mount

Networking

CommandDescription
docker network lsList networks
docker network create NAMECreate network
docker network connect NET CONTAINERConnect container
docker network inspect NETInspect network
docker run --network mynet alpine
docker run -p 8080:80 --name web nginx

Useful Flags

FlagDescription
-dDetached (background)
-itInteractive + TTY
-p HOST:CONTAINERPort mapping
-e VAR=valueEnvironment variable
-v HOST:CONTAINERVolume mount
--name NAMEContainer name
--rmRemove on exit
--restart POLICYRestart policy (always, on-failure)

Cleanup

CommandDescription
docker system pruneRemove unused data
docker system prune -aRemove all unused images
docker system prune -a --volumesInclude volumes
docker system dfDisk usage summary
docker system prune -f
docker container prune -f
docker image prune -a -f