Docker

[Docker] 멀티 호스트 환경에서 컨테이너 관리

ozofweird 2020. 12. 4. 15:35

1. 멀티 호스트 환경과 클러스터링

1) 클러스터링

이미지의 작성이나 컨테이너의 시작 등은 호스트 머신에 설치된 도커가 수행하고 여러 개의 도커를 일원 관리할 때는 Docker Compose를 사용하여 애플리케이션을 실행 환경을 구축한다. 하지만 이 호스트에서 장애가 발생할 경우 서비스가 정지된다. 따라서 시스템의 일부에서 장애가 발생해도 서비스가 정지되지 않도록 장치가 필요하다.

 

위의 문제를 해결하는 기술 중 하나로 클러스터링이 있다. 클러스터링은 여러 대의 서버나 하드웨어를 모아서 한 대처럼 보이게 하는 기술을 말한다.

2) 가용성

시스템이 계속해서 가동될 수 있는 능력을 뜻한다. 가용성이 높을 경우, 서버의 오류나 하드웨어의 고장 등이 발생해도 다른 정상적인 서버나 하드웨어가 대신해서 처리를 계속하도록하여 신뢰성을 얻을 수 있다.

3) 확장성

고부하로 인한 시스템 다운을 피하기 위해 여러 대의 컴퓨터를 클러스터화하여 처리를 분산시킴으로 높은 처리 성능을 얻을 수 있다. 클라우드의 가상 머신의 경우 Auto Scaling 기술이 제공되는 경우가 있다.

 

도커를 사용하면 단일 호스트 머신뿐만 아닌 여러 대의 호스트 머신 상에서 도커를 작동시켜 높은 가용성과 확장성을 가진 애플리케이션 실행 환경을 구축할 수 있다. 이런 클러스터링 기술을 수행하기 위한 툴을 컨테이너 오케스트레이션 툴이라고 한다. 또한 도커에서 지원하는 멀티호스트 환경에서 컨테이너의 장애나 호스터 머신의 상황을 모니터링할 수 있는 툴을 사용하는 것이 좋다.

4) Docker Machine

Docker Machine은 호스터 머신, 클라우드, 가상 환경 등에 도커의 실행 환경을 만들 수 있는 커맨드 라인 툴이다. 대표적으로 AWS, Azure, Digital Ocean, Exoscale, Google Compute Engine, Microsoft Hyper-V, OpenStack, Rackspace, IBM SoftLayer, VirtualBox, VMware등이 있다.

 

 

 

2. 웹 애플리케이션 서비스 공개

1) 서비스 공개

Docker Composer를 사용한 웹 애플리케이션의 실행 환경에서는 로컬 PC에서만 액세스할 수 있다. 로컬 PC가 아닌 인터넷상에 서비스를 운영하기 위해서는 퍼블릭 클라우드인 가상 머신 Google Compute Engine을 사용하여 공개할 수 있다.

2) 실행 환경 구축

우선 도커 실행 환경을 만들기 위해 Google Cloud Platform 계정을 미리 취득한뒤 프로젝트를 만든다. 이후 Google Compute Engine을 이용하기 위해 API 사용을 허가해준다. 또한 미리 Google Cloud SDK를 설치한다.

// GCP 프로젝트 설정
gcloud config set project docker-book
PROJECT_ID=$(gcloud config list project --format "value(core.project)")

echo $PROJECT_ID

// GCE 실행 환경 설정
docker-machine create --driver google \
  --google-project $PROJECT_ID \
  --google-zone asia-northeast1-a \
  --google-machine-type f1-micro \
  --google-tags 'http-server' \
  --google-machine-image https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/family/ubuntu-1604-lts \
  gcp-host
  
// 도커 실행 환경 확인
docker-machine ls

3) GCP 옵션

옵션 설명
--driver GCE상에 실행 환경을 구축하므로 드라이버에 'google' 값을 지정한다,
--google-project GCP에서는 프로젝트 단위로 리소스를 관리한다. 도커 실행 환경을 구축하는 프로젝트를 지정한다. 환경변수 PROJECT_ID에서 설정한 프로젝트명을 사용한다. 참조를 위해 '$'문자를 사용한다.
--google-zone 인스턴스를 생성할 리전을 지정한다. 옵션을 지정하지 않을 경우 'us-centrall-a'로 인스턴스가 생성된다.
--google-machine-type GCE 인스턴스의 머신 타입을 지정한다. 머신 타입에 따라 가상 CPU, 메모리의 크기, 시간당 요금이 달라진다.
--google-tags GCE 인스턴스에 설정할 태그를 지정한다. 여러 개 설정 시 콤마로 구분한다. 인스턴스에 대해 외부에서 HTTP(80)를 열기 위해 'http-server' 태그를 지정한다.
--google-machine-image GCE 인스턴스의 머신 이미지를 지정한다.

※ 그 외에는 GCE 인스턴스의 디스크 크기나 IP 주소 등을 지정할 수 있는 옵션이 있다.

4) 웹 애플리케이션 전개

GCE 상에 도커 실행 환경이 마련된 이후 웹 애플리케이션을 전개한다.

// 'gcp-host'라는 이름의 GCE 인스턴스에 SSH로 액세스
docker-machine ssh gcp-host

// 접속 후 컨테이너 시작
sudo docker container run --name webserver -it -p 80:80 [이미지명]

5) 도커 실행 환경 삭제

// 'gcp-host' 환경 삭제
docker-machine rm gcp-host

※ Digital Ocean, VMware와 같은 다른 환경에서 구축할 때에도 'docker-machine' 명령으로 구축할 수 있다. AWS, Azure의 경우 'Docker Cloud'가 제공된다.


[참고] 완벽한 IT 인프라 구축을 위한 Docker (2판)

728x90