Skip to content

Latest commit

 

History

History
117 lines (96 loc) · 3.18 KB

File metadata and controls

117 lines (96 loc) · 3.18 KB

Docker Compose의 개념

  • Docker Compose는 여러 컨테이너를 모아서 관리하기 위한 툴
  • 서비스 규모가 커지면, 복수의 컨테이너를 유지하고 관리해야 하며, 이를 위해 쿠버네티스 등의 관리 툴이 사용됨
    • docker compose에 대한 탄탄한 이해 => 쿠버네티스도 원할하게 익히고 활용 가능
  • yaml 문법으로 작성

명령들

docker-compose.yml

version: "3"

# 컨테이너들 설정
services:
  db:
    image: mysql:5.7
    restart: always
    volumes:
      - ./mysqldata:/var/lib/mysql
  environment:
    - MYSQL_ROOT_PASSWORD=alpha
    - MYSQL_DATABASE=alphadb
  # 시간으로 해석하지 않게 쌍따옴표 붙여야
  ports:
    - "3306:3306"
  • restart
    • 서버는 24시간 동작해야 하므로, 언제든 다운될 수 있다.
    • 위 옵션으로 웬만한 케이스에서는 계속 동작할 수 있다.
  • volume
    • docker run 옵션 중, -v 옵션과 동일한 역할
    • 여러 volume을 지정할 수 있기 때문에, 리스트처럼 작성
    • v 옵션과 달리 상대경로로 작성 가능
  • environment
    • Dockerfile의 ENV 옵션과 동일한 역할

docker-compose 실행 명령

  • 보통 d 옵션을 사용하며, d 옵션은 백그라운드 실행을 의미함
docker-compose up -d
  • 이미지 재빌드가 필요하다면, build 옵션을 추가해야함
    • 그렇지 않으면, 이미 작성된 이미지를 사용하게 됨
docker-compose up -build -d
  • Docker Compose 중지 명령 => 모든 컨테이너 중지됨
docker-compose stop
  • Docker Compose 에서 사용하는 컨테이너 삭제 명령
docker-compose down

추가 문법 이해

version: "3"

# 주석 가능?
services:
  app:
    build:
      context: ./01_FLASK_DOCKER
      dockerfile: Dockerfile
    links:
      - "db:mysqldb"
    ports:
      - "80:8080"
    container_name: appcontainer
    depends_on:
      - db

  db:
    image: mysql:5.7
    restart: always
    volumes:
      - ./mysqldata:/var/lib/mysql
  environment:
    - MYSQL_ROOT_PASSWORD=alpha
    - MYSQL_DATABASE=alphadb
  ports:
    - "3306:3306"
  container_name: dbcontainer
  • build
    • 이미지를 Dockerfile 기반으로 작성시 사용
      • context
        • Dockerfile이 있는 디렉토리
      • dockerfile
        • 도커파일 파일명
  • links
    • 컨테이너 내부에서, 다른 컨테이너를 접속하고 싶을 때 사용
    • 다음 YAML 코드에서, db 컨테이너를 app 컨테이너에서 사용하고 싶을 때
  • .dockerignore
    • .gitignore 비슷
  • depends_on
    • 여러 컨테이너를 Docker Compose로 실행할 경우, 각 컨테이너가 실행을 시작하는 시점이 다를 수 있다.
    • depends_on은 컨테이너의 실행 순서를 제어할 수 있다.
    • 그러나, 컨테이너가 ready 상태가 될 때까지를 명확히 제어하는 거슨 아니므로, 기대한대로 동작하지 않을 수는 있음
  • docker-compose exec [컨테이너이름]
    • 실행중인 컨테이너에 명령어를 실행할 수 있음.