Docker Compose 필요성 : 다수의 서비스를 실행하는 복잡한 애플리케이션을 설정할 때 각각 서비스에 일일이 docker run 할 필요 없이 하나의 명령어로 각 서비스에 대한 컨테이너를 생성해준다.

 

Docker Compose

    • YAML 형식의 구성파일을 사용해야 한다
version: '2'
services:
  redis:
    image: redis
  db:
    image: postgres:9.4
  vote:
    build: ./vote
    depends_on:
        - redis
        - db
    networks:
      - front-end
      - back-end
    ports:
      - "8085:6000"
  result:
    image: result
    networks:
      - front-end
      - back-end

networks:
  front-end:
  back-end:
  • version의 경우 필수는 아니지만, 강력히 권장되는 설정이다.
    • version: 1 - 별도의 version을 설정하지 않으면 자동으로 설정된다. 네트워크와 볼륨 설정을 명시적으로 지정할 수 없다.
    • version: 2 - 네트워크와 볼륨 설정을 명시적으로 지정할 수 있다. 또한 depens_on 설정 또한 해줄 수 있다. 보통 로컬로 컨테이너를 관리하는데에 사용된다.
    • version: 3 - Docker Swarm 클러스터와 통합된 Docker Compose 설정을 지원한다. 
  •  version2 부터는 기본적으로 루트 레벨에 꼭 serivces를 넣어줘야 한다. 이 속성 아래에 있는 것을 컨테이너로 생성시켜준다.
  • services 다음 레벨에 써주는 것은 컨테이너 이름을 뜻한다. 컨테이너 밑에 속성들은 컨테이너에 대한 설정 정보이다.
    • 여러 인자를 받을 수 있는 속성의 경우 한 개만 입력하여도 -(하이픈)을 꼭 넣어줘야 한다.
    • build 속성을 통해 run과 동시에 build를 진행할 수 있다. 도커파일이 있는 위치를 인자로 줘야 한다. (docker run 명령어는 build를 같이 할 수 없음)
    • 의존적인 컨테이너는 대상 컨테이너가 실행된 후에 실행되어야 한다. 이를 위해서는 depends_on 속성을 주고 인자로 컨테이너 이름을 주면 된다.
  • networks 속성을 통해 컨테이너 간에 통신을 이뤄지게 할 수 있다.
    • 도커가 새로운 가상 네트워크를 생성해주고, 각 컨테이너에 이 가상 네트워크 내부 서브넷 IP를 할당해준다.
    • 도커 네트워크를 사용하면 도커의 내장 DNS에 의해 컨테이너 이름이 내부 IP로 변경된다. 즉, 한 컨테이너에서 다른  컨테이너의 이름을 사용하면 그 이름은 내부 IP로 변경된다. 이 때 다른 네트워크와는 통신할 수 없다.
    • 이 속성을 설정하지 않으면 도커 기본 브릿지 네트워크에 모든 서비스가 속하게 된다.
  •  docker-compose up 명령어를 통해 docker-compose.yml 파일을 실행한다.
    • 이 명령어는 기본적으로 docker-compose.yml 파일을 디폴트로 읽는다. 만약 다른 파일 이름일 시에는 -f을 주면 된다.
    • ex) docker-compose -f my-compose.yml up

'Infra > Docker' 카테고리의 다른 글

Docker 스토리지  (0) 2024.09.12
Docker Engine  (0) 2024.09.12
CMD vs Entrypoint  (0) 2024.09.10
환경 변수 설정  (0) 2024.09.10
이미지 생성  (0) 2024.09.10

+ Recent posts