4. docker-compose-syntax

Docker compose

  • λ‹€μˆ˜μ˜ 도컀 μ»¨ν…Œμ΄λ„ˆλ₯Ό μΌκ΄„μ μœΌλ‘œ μ •μ˜ν•˜κ³  μ œμ–΄ν•˜λŠ” 도ꡬ이닀.

  • ν™•μž₯μžλŠ” .yml 을 μ‚¬μš©ν•œλ‹€.

docker compose 파일 ꡬ성

  • version: 도컀 컴포즈 버전 λͺ…μ‹œ

  • services: μ‹€ν–‰ν•˜λ €λŠ” μ»¨ν…Œμ΄λ„ˆλ“€μ„ μ •μ˜ν•˜λŠ” μ—­ν• 

    • image: 이미지λͺ… μ§€μ •

    • environment: ν™˜κ²½ λ³€μˆ˜ μ„€μ •

    • build: λΉŒλ“œν•  이미지에 λŒ€ν•œ μ„€μ •

      • context: 도컀 μ»¨ν…μŠ€νŠΈ 경둜 μ§€μ •

      • dockerfile: 도컀 파일 경둜 μ§€μ •

    • command: μ»¨ν…Œμ΄λ„ˆκ°€ 싀행될 λ•Œ μˆ˜ν–‰ν•  λͺ…λ Ήμ–΄

    • ports: κ°œλ°©ν•  포트 μ§€μ •, docker run λͺ…λ Ήμ–΄μ˜ -p와 동일

    • depends_on: μ»¨ν…Œμ΄λ„ˆ κ°„ μ˜μ‘΄μ„± μ£Όμž…. λͺ…μ‹œλœ μ»¨ν…Œμ΄λ„ˆκ°€ λ¨Όμ € μƒμ„±λ˜κ³  μ‹€ν–‰

    • expose: 링크둜 μ—°κ³„λœ μ»¨ν…Œμ΄λ„ˆμ—κ²Œλ§Œ κ³΅κ°œν•  포트 μ„€μ •

    • volumes: μ»¨ν…Œμ΄λ„ˆμ— 볼룸을 마운트

    • restart: μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ  λ•Œ μž¬μ‹œμž‘ μ •μ±…

      • no: μž¬μ‹œμž‘ν•˜μ§€ μ•ŠμŒ

      • always: 외뢀에 μ˜ν•΄ μ’…λ£Œλ˜μ—ˆμ„ λ•Œ 항상 μž¬μ‹œμž‘

      • on-failure: 였λ₯˜κ°€ μžˆμ„ μ‹œ μž¬μ‹œμž‘

  • network

  • volume

  • config

  • secret

All about docker compose syntax

docker-compose up [options] [SERVICE...]

컴포즈 νŒŒμΌμ„ κΈ°λ°”λŠ₯둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό λΉŒλ“œν•˜κ³  μ‹€ν–‰ν•œλ‹€.

  • -f, --file: 파일 경둜 μ§€μ •

    • docker compose -f /path/to/docker-compose.yml up

  • -d, --detach: μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰

  • --build: 항상 μ»¨ν…Œμ΄λ„ˆλ₯Ό λΉŒλ“œ. 이미지가 없을 κ²½μš°μ—λ„ λΉŒλ“œ

  • --no-build: 이미지λ₯Ό λΉŒλ“œν•˜μ§€ μ•Šκ³  기쑴에 μžˆλŠ” 이미지λ₯Ό μ‚¬μš©

  • --force-recreate: λ³€κ²½λœ 섀정을 λ¬΄μ‹œν•˜κ³  μ»¨ν…Œμ΄λ„ˆλ₯Ό μž¬μƒμ„±

  • --abort-on-container-exit: ν•œ μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜λ©΄ λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆλ₯Ό 쀑지

docker-compose down [options] [SERVICE...]

μ»¨ν…Œμ΄λ„ˆλ“€μ„ μ€‘μ§€ν•˜κ³  μ—°κ²°λœ λ„€νŠΈμ›Œν¬, λ³Όλ₯¨λ“±μ„ μ œκ±°ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

  • -v, --volumes: μ»¨ν…Œμ΄λ„ˆμ— μ—°κ²°λœ λ³Όλ₯¨λ„ ν•¨κ»˜ μ‚­μ œ

  • --remove-orphans: νŒŒμΌμ—μ„œ μ •μ˜λ˜μ§€ μ•Šμ€ μ„œλΉ„μŠ€μ˜ μ»¨ν…Œμ΄λ„ˆλ₯Ό ν•¨κ»˜ 제거

  • --timeout TIMEOUT: μ»¨ν…Œμ΄λ„ˆλ₯Ό 쀑지할 λ•Œ λŒ€κΈ°ν•˜λŠ” μ‹œκ°„μ„ μ§€μ •

docker-compose down -v: λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆμ™€ λ„€νŠΈμ›Œν¬λ₯Ό μ’…λ£Œ + λ³Όλ₯¨ μ‚­μ œ docker-compose down: μ»¨ν…Œμ΄λ„ˆλ§Œ μ€‘μ§€ν•˜κ³  λ³Όλ₯¨κ³Ό λ„€νŠΈμ›Œν¬ μœ μ§€

docker-compose build

μ»¨ν…Œμ΄λ„ˆλ₯Ό λΉŒλ“œν•œλ‹€.

  • --force-rm: λΉŒλ“œ 전에 μž„μ‹œ μ»¨ν…Œμ΄λ„ˆλ₯Ό 제거

  • --no-cache: 이전에 λΉŒλ“œλœ μΊμ‹œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  항상 μƒˆλ‘œμš΄ 이미지 λΉŒλ“œ

  • --pull: λΉŒλ“œλ˜λŠ” 도컀 μ΄λ―Έμ§€μ˜ μ΅œμ‹  버전을 λ‹€μš΄λ‘œλ“œ

  • --compress: λΉŒλ“œλœ 이미지λ₯Ό μ••μΆ•

  • --parallel: μ—¬λŸ¬ μ„œλΉ„μŠ€λ₯Ό λ³‘λ ¬λ‘œ λΉŒλ“œ

  • --quiet: λΉŒλ“œ μ§„ν–‰ 상황을 좜λ ₯ν•˜μ§€ μ•Šκ³  쑰용히 μ‹€ν–‰

  • --build-arg: λΉŒλ“œ 쀑에 ARG μ§€μ‹œλ¬Έμ„ μ„€μ •

  • --progress: λΉŒλ“œ μ§„ν–‰ 상황을 μ„€μ •(auto, plain, tty)

  • --compatibility: 이전 λ²„μ „μ˜ 도컀와 ν˜Έν™˜λ˜λ„λ‘ λΉŒλ“œ

  • --memory: λΉŒλ“œ 쀑에 μ‚¬μš©ν•  λ©”λͺ¨λ¦¬ ν•œλ„λ₯Ό μ„€μ •

  • --build-from-source SERVICE: 둜컬 λ””λ ‰ν† λ¦¬μ—μ„œ μ„œλΉ„μŠ€μ˜ 이미지λ₯Ό λΉŒλ“œ

  • docker-compose build --no-cache [SERVICE]

  • docker-compose build -d

docker-compose start, restart, stop

컴포즈 νŒŒμΌμ— μ •μ˜λœ μ„œλΉ„μŠ€λ₯Ό μ‹œμž‘/μž¬μ‹œμž‘/μ •μ§€

down, stop 차이점

  • down 은 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ •μ§€ + μ»¨ν…Œμ΄μ™€ κ΄€λ ¨λœ λͺ¨λ“  λ¦¬μ†ŒμŠ€ 제거

  • stop 은 μ»¨ν…Œμ΄λ„ˆ μ •μ§€

docker-compose run

  • μƒˆλ‘œμš΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ³  λͺ…λ Ή μ‹€ν–‰

  • νŠΉμ • μ„œλΉ„μŠ€λ₯Ό μ‹€ν–‰ν•˜λŠ” 것이 λͺ©μ 

  • 컴포즈 νŒŒμΌμ— μ •μ˜λœ μ„œλΉ„μŠ€ 쀑 ν•˜λ‚˜λ§Œ μ‹€ν–‰ν•˜λ©°, μ¦‰μ„μ—μ„œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹œμž‘

up 과의 차이점

  • up 은 컴포즈 νŒŒμΌμ— μ •μ˜λœ λͺ¨λ“  μ„œλΉ„μŠ€λ₯Ό μ‹œμž‘ν•˜λ©°, μ»¨ν…Œμ΄λ„ˆλ₯Ό λΉŒλ“œν•˜κ³  μ‹œμž‘ν•œλ‹€.

  • μ„œλΉ„μŠ€ κ°„μ˜ μ˜μ‘΄μ„±μ„ κ³ λ €ν•˜μ—¬ λͺ¨λ“  μ„œλΉ„μŠ€λ₯Ό ν•¨κ»˜ μ‹œμž‘ν•œλ‹€.

docker-compose pause, unpause

docker-compose ps

docker-compose logs

docker-compose exec

docker-compose images

docker-compose config

docker-compose version

docker-compose help

docker compose

docker compose sample

version: '3.8'

services:
  db:
    container_name: postgres
    image: postgres:14.11-alpine
    restart: always
    ports:
      - '5433:5432'
    volumes:
      - ./docker/db_data:/var/lib/postgresql/data
    networks:
      - nestjs-backend
    environment:
      - POSTGRES_USER=swd
      - POSTGRES_PASSWORD=1234
      - POSTGRES_DB=backend

  pgadmin:
    container_name: pgadmin
    image: dpage/pgadmin4
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@admin.com
      PGADMIN_DEFAULT_PASSWORD: root
    ports:
      - '5050:80'
    networks:
      - nestjs-backend

  app:
    image: node-local:0.1
    container_name: node-local
    build:
      context: .
      dockerfile: ./docker/Dockerfile.local
    ports:
      - '3000:3000'
    volumes:
      - ./src:/app/src
    command: >
      sh -c "npm run mig:local:run && npm run start"
    networks:
      - nestjs-backend
    depends_on:
      - db

networks:
  nestjs-backend:
    driver: bridge

Question

1. service λ‚΄μ—μ„œ μ •μ˜ν•˜λŠ” volume κ³Ό service λ°–μ—μ„œ μ •μ˜ν•˜λŠ” volume 의 차이가 무엇인가

μ„œλΉ„μŠ€ λ‚΄μ—μ„œ μ •μ˜ν•˜λŠ” volume

  • ν•΄λ‹Ή μ„œλΉ„μŠ€μ—λ§Œ 적용

  • μ„œλΉ„μŠ€μ˜ μ»¨ν…Œμ΄λ„ˆλŠ” ν•΄λ‹Ή λ³Όλ₯¨μ„ μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό κ³΅μœ ν•˜κ±°λ‚˜ μ €μž₯

  • μ„œλΉ„μŠ€κ°€ μ‹€ν–‰λ˜λŠ” λ™μ•ˆμ—λ§Œ μœ νš¨ν•˜λ©°, μ„œλΉ„μŠ€κ°€ μ€‘μ§€λ˜λ©΄ μ‚­μ œλ  수 있음

db μ„œλΉ„μŠ€ 내에 μ—°κ²°ν•œ λ³Όλ₯¨μ€, dbμ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜λ©΄ μ ‘κ·Όν•  수 μ—†λ‹€.

μ„œλΉ„μŠ€ λ°–μ—μ„œ μ •μ˜ν•˜λŠ” volume

  • λͺ¨λ“  μ„œλΉ„μŠ€μ—μ„œ 곡유/μž¬μ‚¬μš© ν•  수 있음

  • μ—¬λŸ¬ μ„œλΉ„μŠ€μ—μ„œ λ™μΌν•œ 데이터λ₯Ό κ³΅μœ ν•˜κ±°λ‚˜ μœ μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš”λ¨

  • μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜μ–΄λ„ μœ μ§€λ˜λ©°, λ‹€λ₯Έ μ„œλΉ„μŠ€μ—μ„œλ„ μ‚¬μš©ν•  수 있음

Last updated