issues
search
tonykang22
/
study
0
stars
0
forks
source link
[Docker & K8S] 16. 도커 컴포즈 - 명시적으로 컨테이너 관리하기
#69
Open
tonykang22
opened
2 years ago
tonykang22
commented
2 years ago
16. 도커 컴포즈 - 명시적으로 컨테이너 관리하기
도커 컴포즈
단일 서버에서 여러 컨테이너를 프로젝트 단위로 묶어서 관리하기 위한 용도로 사용한다.
docker-compose.yml YAML 파일을 통해 명시적으로 관리한다.
프로젝트 단위로 격리된 환경을 부여할 수 있다.
프로젝트 단위로 도커 네트워크와 볼륨 관리가 가능하다.
프로잭트 내 서비스 간 의존성 정의가 가능하다.
e.g. Project 1에서 Service1을 실행하기 위해서는 Service2를 실행해야 하도록 한다던지,
프로젝트 내 서비스 디스커버리 자동화가 가능하다.
손 쉬운 컨테이너 수평 확장이 가능하다.
용어 정리
프로젝트 (Project)
도커 컴포즈에서 다루는 워크스페이스 단위이다.
함께 관리하는 서비스 컨테이너의 묶음이다.
프로젝트 단위로 기본 도커 네트워크가 생성된다.
서비스 (Service)
도커 컴포즈에서 컨테이너를 관리하기 위한 단위로
scale을 통해 서비스 컨테이너의 수 확장이 가능하다.
컨테이너 (Container)
서비스를 통해 컨테이너 관리가 가능하다.
yaml 파일 하나가 프로젝트의 명세이다.
scale : 해당 컨테이너의 수
위의 예시에는 db, app, web 서비스, 총 3가지 서비스가 존재한다.
docker-compse.yml
호환성 매트릭스는 공식 문서에서 확인할 수 있다.
버전 3부터 제공하는 명령어가 도커 스왐에서 제공하는 명령어인지 확인해야한다.
e.g. deploy는 swarm에서만 사용할 수 있다.
도커 스왐 (Docker Swarm)
여러 서버를 기반으로 스왐 클러스터를 형성하여 컨테이너를 관리하는 컨테이너 오케스트레이션 시스템이다.
쿠버네티스와 동일 목적으로 만들어졌지만 인기를 끌지 못했다.
서비스, 네트워크, 볼륨의 옵션을 정의할 수 있다.
네트워크는 정의를 하지 않더라도 default 네트워크가 브릿지로 생성된다.
실습 예시
docker-compose up
커맨드를 통해 docker-compose.yml로 정의한 컨테이너를 시작한다.
docker-compose ls
를 통해 실행 중인 프로젝트를 확인할 수 있다.
docker-compose.yml 을 살펴보면, 4가지 서비스가 존재하는 것을 확인할 수 있다.
프로젝트를 실행했다 제거해보면, 아래와 같이 4개의 서비스가 제거된 것을 확인할 수 있다.
환경변수는 key, value 혹은 key, object 모두 사용이 가능하다.
depends_on
을 통해 의존성 정의가 가능하다.
서비스 확장은
--scale
명령어를 통해 할 수 있다.
스케일링 유의점
호스트 포트를 지정 시, 충돌이 일어날 수 있다. 호스트 포트를 삭제해준다.
컨테이너 이름을 지정할 수도 있는데, 이름이 지정되므로 스케일링이 되지 않는 점을 유의해야한다.
그 외의 명령어 목록이다.
주요 사용 목적
로컬 개발 환경 구성
특정 프로젝트의 로컬 개발 환경 구성 목적으로 사용할 수 있다.
프로젝트의 의존성(Redis, MySQL, Kafka 등)을 쉽게 띄울 수 있다.
자동화된 테스트 환경 구성
CI/CD 파이프라인 중 쉽게 격리된 테스트 환경을 구성하여 테스트 수행이 가능하다.
단일 호스트 내 컨테이너를 선언적 관리
단일 서버에서 컨테이너를 관리할 때 YAML 파일을 통해 선언적으로 관리가 가능하다.
16. 도커 컴포즈 - 명시적으로 컨테이너 관리하기
도커 컴포즈
용어 정리
docker-compse.yml
실습 예시
docker-compose up
커맨드를 통해 docker-compose.yml로 정의한 컨테이너를 시작한다.docker-compose ls
를 통해 실행 중인 프로젝트를 확인할 수 있다.depends_on
을 통해 의존성 정의가 가능하다.--scale
명령어를 통해 할 수 있다.주요 사용 목적
로컬 개발 환경 구성
자동화된 테스트 환경 구성
단일 호스트 내 컨테이너를 선언적 관리