[Docker] 다양한 컨테이너 관리

2020. 12. 3. 14:46Docker

1. 웹 3계층

1) 인프라 아키텍처

인프라 아키텍처란, 애플리케이션 기동시키기 위해 여러 개의 서버에 기능과 역할을 분할한 인프라 전체 구성을 뜻한다. 대규모 시스템의 경우 서브 시스템으로 나누어 개발하는 경우가 많아 애플리케이션 개발 기술 및 플랫폼 기술에 정통한 IT 아키텍트를 중심으로 인프라 처리 방식을 결정한다. 웹 3계층은 대표적인 아키텍처로 웹 시브템의 서버들을 역할별로 3개로 나누는 설계를 뜻한다.

2) 프론트 서버

프론터 서버는 클라이언트의 웹 브라우저가 보낸 HTTP 요청을 받아, HTTP 응답을 반환하는 서버 기능이다. 웹 서버의 기능은 미들ㄹ웨어로 구축하는 경우가 있고 Nginx, Microsoft의 IIS 등이 있다. 요청 처리가 메인 업무이기에 부하가 높은 경우 처리 대수를 늘리거나 로드밸런서 등과 같은 기기를 사용하여 부하분산을 한다.

2) 애플리케이션 서버

애플리케이션 서버는 업무 처리를 실행하는 서버이다. 결제 처리, 수주 처리 등 애플리케이션의 처리를 실행하는 프로그램의 실행 환경이 된다. 프론트 서버와 동일하게 미들웨어 구축하는 경우도 있다.

3) 데이터베이스 서버

영구 데이터를 관리하기 위한 서버로, 애플리케이션의 처리 실행에서 발생하는 영구 데이터는 RDBMS 기능을 가진 미들웨어에서 관리된다. 대표적으로 MySQL, PostgreSQL, Oracle 등이 있다.

 

NoSQL은 병렬분산처리나 유연한 스키마 설정이 특징이며, 주요 방식으로는 키값 혹은 도큐먼트 지향 데이터베이스 등이 있다. 대량의 데이터 축적이나 병렬처리가 특기이기에 많은 사용자의 액세스를 처리할 필요가 있는 온라인 시스템에서 널리 이용되고 있다. 대표적으로 Redis, MongoDB가 있다.

 

영구 데이터는 높은 가용성이 요구되기 때문에 클러스터링 같은 기술로 다중화하는 경우가 많다. 또한 장애에 대비하여 데이터의 백업이나 원격지 보관 등과 같은 대책이 필요하다. 따라서 운용 상황에 따라 OS나 미들웨어의 파라미터 설정의 변경과 같은 퍼포먼스 튜닝이 필요하다.

 

 

 

2. 영구 데이터 관리

1) 데이터 백업 및 복원

데이터베이스에는 기밀 정보도 포함되어 있기 때문에 보안 대책이나 적절한 운용 규칙이 필요하다. 백업은 물리적인 매체가 있는 경우도 있고 클라우드상의 스토리지 서비스를 이용하는 경우도 있다. 또한 재해에 대비하여 원격지에 보관하는 경우도 있다.

2) 로그 수집

시스템이나 애플리케이션은 각 서버상에 저장하는 경우도 있지만 여러 개의 서버로 된 분산 환경에서 통합 감시를 하는 경우는 로그 수집 전용 서버를 마련하는 것이 일반적이다. 또한 사용자 인증 시의 액세스 로그 등은 보안의 감사 로그로 장기 저장이 의무화되는 경우도 있다. Unix 계열의 OS의 경우 syslogd라는 데몬을 이용하여 커널이나 애플리케이션으로부터 수집한 로그를 관리한다.

 

도커는 컨테이너를 사용하여 서버 기능을 제공한다. 컨테이너는 필요에 따라 생성하거나 파기하는 운용에 적합하며, 하나의 컨테이너에는 하나의 프로세스를 구성해두는 것이 대원칙이다. 따라서 애플리케이션의 실행 모듈, 각종 라이브러리 모듈, 미들웨어의 설정 파일 등은 서버 프로세스가 작동하는 컨테이너 안에 저장하고, 시스템 가동 후에 생성되는 영구 데이터에 대해서는 별도의 인프라 아키텍처를 검토하는 것이 바람직하다.

3) 참고 사항

도커 컨테이너는 웹 프론트 서버와 같이 트래픽의 증감 등에 맞춰 필요할 때 실행하고 필요 없어지면 파기시킨다는 일회성 운용에 적합하다. 즉, 컨테이너 안은 영구 데이터를 저장하는데 적합하지 않다. 도커의 기능으로서는 데이터 전용 컨테이너에 데이터를 관리하는 방법이나 로컬 호스트를 마운트하여 영구 데이터를 저장해두는 방법이 있다. 어떤 방법이든 데이터의 증가량이나 I/O량은 어노 정도인지, 데이터를 어느 정도로 다중화할지, 어떤 운용으로 백업/복원을 해야 할지를 정해야한다.

 

도커에 적합한 환경은 여러 디바이스로부터 데이터를 처리해야하는 IoT, 머신 리소스를 활용하여 대량의 처리를 단기간에 하는 과학기술계산 분야에서 많이 사용한다.

 

 

 

3. Docker Compose

웹 시스템에는 여러 개의 도커 컨테이너가 협력하여 작동한다. Docker Compose는 여러 컨테이너를 모아서 관리하기 위한 툴이다. Docker Compose는 'docker-compose.yml' 파일에 컨테이너의 구성 정보를 정의하여 동일 호스트상의 여러 컨테이너를 일괄적으로 관리할 수 있다.

 

Compse 정의 파일은 웹 애플리케이션의 의존관계(데이터베이스, 큐, 캐시, 애플리케이션 등)을 모아서 설정할 수 있다. 정의 파일을 바탕으로 'docker-compose' 명령을 실행하면 여러 개의 컨테이너를 모아서 시작하거나 정지할 수 있다. YAML 형식으로 관리하므로 지속적 디플로이나 지속적 인티그레이션 프로세스에 있어서 자동 테스트를 할 때의 환경 구축에도 이용할 수 있다.


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

728x90