Docker Compose

김래영·2023년 3월 17일
0

Docker Study

목록 보기
5/9
post-thumbnail

도커 컴포즈는 다중 컨테이너 설정을 쉽게 관리할 수 있습니다.

모든 서비스와 모든 컨테이너를 즉시 시작하고 필요하다면 필요한 이미지를 빌드하는 것을 하나의 명령어를 사용하여 모든 것을 시작하거나 중단할 수 있습니다.(오케스트레이션)

  • docker builddocker run 명령을 대체할 수 있는 도구입니다.
    • 다수의 docker build & docker run 명령을 하나의 구성 파일로 가집니다.
  • 누구와도 공유할 수 있는 정의된 언어를 사용하는 구성파일을 가집니다.
    • 이 구성 파일을 활용한 하나의 명령으로 전체 다중 컨테이너 애플리케이션을 시작하거나 중단할 수 있습니다.
  • 도커 컴포즈는 Dockerfile, 이미지, 컨테이너를 대체하지 않습니다.
  • **도커 컴포즈는 다수의 호스트에서 다중 컨테이너를 관리하는데 적합하지 않고 하나의 동일한 호스트에서 다중 컨테이너를 관리하는데 좋습니다.**

Compose 파일 만들기

프로젝트 루트 경로에서 docker-compose.yaml 파일을 만듭니다.

  • docker-compose.yaml파일은 들여 쓰기를 사용하여 구성 옵션 간의 종속성을 표현합니다.
  • 다중 컨테이너 환경, 프로젝트 설정을 기재합니다.
  • 들여 쓰기로 하위를 구성합니다.
  • 디폴트 모드detach모드에서 실행하고 종료될 때 자동 제거됩니다.
  • 도커가 컴포즈파일에 특정된 모든 서비스에 대해 새 환경을 자동으로 생성하고 해당 네트워크에 추가합니다.
version: "3.8" // 항상 도커 컴포즈 사양 버전을 정의하는 것으로 시작(컴포즈 파일에서 사용할 수 있는 기능에 영향을 미침)
services: // 다음 줄은 들여쓰기를 사용하여 종속성 표현 (children(컨테이너))
     mongodb:  // 예로 사용할 컨테이너가 3개 라면 services 아래에 3개의 하위 요소로 컨테이너에 레이블을 지정하기 위해 컨테이너 이름을 지정
         image: 'mongo' // 이미지 명시
        volumes: // (다중 볼륨이 있다면 목록으로 작성)
            - data:/data/db (<볼륨 이름>:<매핑할 컨테이너 내부 경로>)
        # containter_name: mongoeb (컨테이너 이름을 지정할 수 있음)
        environment: 
            MONGO_INITDB_ROOT_USERNAME: max (# 을 추가하여 주석처리 할 수 있습니다.)
            MONGO_INITDB_ROOT_PASSWORD: secret
            or
            env_file: 
                - <해당 env파일 상대 경로>
        networks: // 자체 네트워크 관리 (디폴트 네트워크를 많이 사용)
            - <네트워크>

     backend: 
         build: <Dockrfile을 보유하는 폴더 상대 경로>
            # context: <Dockrfile을 보유하는 폴더 상대 경로>
            # dockerfile: Dockerfile
            # args:
                # some-arg: 1
         port:
             - '80:80'
         volumes:
             - logs:/app/logs
            - ./backend:/app // 바인드마운트(상대 경로)
            - /app/node_modules // 익명 볼륨
         env_file: 
             - ./env/backend.env
         depends_on:
             - mongodb

     frontend: 
         build: ./frontend
        ports:
            - '3000:3000'
            - volumes: ./frontend/src:/app:src
        stdin_open: true // 인터렉티브 모드 (-it)
        tty: true (-it) 
        depends_on:
            - backend


volumes: // 명명된 볼륨 지정(익명 볼륨 및 바인드 마운트는 지정할 필요 없음)
    data: 
    logs:

Docker Compose Up & Down

docker-compose up
docker-compose up --build (--build옵션으로 강제 이미지 빌드)
  • 컴포즈 파일에서 찾을 수 있는 모든 서비스가 시작됩니다.
  • 필요한 이미지 빌드 및 컨테이너를 실행 실행합니다.
  • 빌드를 위한 것으로 모든 이미지를 가져온 다음 컨테이너를 시작합니다.
docker-compose down
docker-compose down -v (-v 옵션으로 데이터 볼륨 제거)
  • 모든 컨테이너를 중지하고 제거합니다.
  • 모든 컨테이너가 삭제되고 생성된 디폴트 네트워크와 모든 것이 종료되지만 볼륨은 기본적으로 삭제되지 않습니다.
profile
개발 노트

0개의 댓글