본문 바로가기

docker

Docker-Compose란?

  • 일반적으로 하나의 애플리케이션은 여러개의 서비스로 구성되어 있습니다. 이를 도커로 관리하기 위해서 서비스마다 run 명령어를 사용할수도 있지만 docker-comose.yaml 파일을 사용한다면 여러 컨테이너를 하나의 파일에서 쉽게 관리할 수 있습니다

예시 및 간단한 설명

version: '3' # 버전에 따라 지원하는 도커 엔진 버전이 달라지는데 일반적으로 3을 사용한다 

services: # 실행할 컨테이너들 정의

  nginx: # 컨테이너(서비스) 이름
    image: nginx:latest # 이미지 정보 [저장소이름]/[이미지이름]:[태그]
    ports: # host-container 간 포트를 연결 [host포트]:[container포트]
      - "60080:80"
    volumes: # .는 현재 디렉토리를 의미하며 현재 디렉토리와 컨테이너의 디렉토리를 연결해 데이터를 host쪽에 저장
      - .:/usr/share/nginx/html/
    restart: always # 컨테이너가 예기치 않게 종료 되었을 때 어떻게 할 지 결정 (no(default)/always/on-failure)
    environment: # 컨테이너에서 사용할 환경변수들
      - KEY = VALUE

  django:
    build: # 별도의 Dokerfile에서 이미지 빌드 후 사용
      context: . # docker build 명령을 실행할 디렉터리 경로
      dockerfile: ./compose/django/Dockerfile-dev # 이미지를 빌드할 dockerfile 지정 
    volumes:
      - db_data:/app
    links: # 다른 컨테이너와 연결하기 위한 설정 [연결할 컨테이너 이름]:[해당 컨테이너에서 참조할 이름]
      - mysql:db # version 3부터 links를 사용하지 않더라도 한 네트워크 안에 있는 서비스끼리 서로 통신 가능
    depends_on: # 컨테이너의 의존 관계를 명시
      - mysql # mysql 컨테이너 실행 후 django 컨테이너 실행
    network_mode: host # bridge:해당 네트워크 안에서만 통신
                       # host:호스트와 똑같은 네트워크 환경
                       # none: 네트워크 사용 x

# 도커가 관리하는 볼륨 생성, 컨테이너에서 해당 볼륨에 데이터 저장 가능
volumes:
  db_data: {}

주요 명령어

docker-compose pull
  • 필요한 이미지를 다운
docker-compose build
  • 필요한 이미지를 빌드
docker-compse up [service 이름] [옵션]
  • 서비스 실행
    • -d : 서비스 실행 후 콘솔로 나옴
    • —force-recreate : 컨테이너 지우고 다시 생성
    • —build : 서비스 시작 전 이미지 새로 만듦
docker-compose ps
  • 현재 실행 중인 서비스 목록
docker-compose logs -f
  • 서비스 로그 보기
docker-compose top
  • 서비스 내에서 실행 중인 프로세스 목록
docker-compose stop 
  • 서비스 멈춤
docker-compose start 
  • stop된 서비스의 컨테이너 실행
docker-compose run [service 이름] 
  • 해당 서비스에 컨테이너를 하나 더 실행
    • -e, -p, —rm 과 같은 옵션 사용 가능
docker-compose exec [service 이름] [명령어]
  • 서비스의 컨테이너에서 명령어 실행
docker-compose down [service 이름]
  • 서비스 멈추고 컨테이너 삭제

'docker' 카테고리의 다른 글

Docker란?  (0) 2022.01.07