Docker에 대해 학습하기 전에, Docker를 사용하기 위해 필요한 시스템과 IT 인프라 기초에 대해 정리해보려고 한다.
클라우드의 등장
• 클라우드의 등장으로 시스템 개발의 흐름이 크게 바뀌었다. 자사에서 데이터 센터나 기계실을 보유하여 온프레미스(On-premises) 환경에서 가동시키던 서버들을 클라우드 상의 가상 인스턴스로 옮기고, 데이터베이스나 네트워크와 같은 클라우드 서비스를 이용함으로써 실행 환경의 구축 범위가 극도로 줄어들어 짧은 사이클로 릴리스를 반복하는 스타일로 바뀌었다.
시스템 기반의 구성 요소
1. 하드웨어(Hardware): 시스템 기반을 구성하는 물리적인 요소로서 서버 장비 본체나 데이터를 저장하기 위한 스토리지, 전원 장치 등이 들어감.
2. 네트워크(Network): 시스템 이용자가 원격지에서 액세스할 수 있도록 서버들을 연결하기 위한 요구사항. 라우터, 스위치, 방화벽 등과 같은 네트워크 장비나 그것들을 연결하기 위한 케이블 배선 등도 관리함.
3. 운영체제(OS): 하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어로, 하드웨어의 리소스나 프로세스를 관리함.
4. 미들웨어(Middleware): 운영체제와 응용 소프트웨어 사이에 들어가는 소프트웨어로, 특정 역할을 하기 위한 목적으로 이용되는 소프트웨어. (ex. 웹 서버, 웹 애플리케이션 서버, 데이터베이스 서버 등)
온프레미스와 클라우드
• 온프레미스(On-premises)
- 기업 시스템에서 지금까지 상당히 많이 채택되어 온 것으로, 자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지 모두 수행하는 형태를 온프레미스라고 한다.
- 초기 시스템 투자에 드는 비용 부담이 크며, 시스템 가동 후의 운용에 드는 비용도 시스템 이용량과 상관없이 일정 금액을 부담해야한다.
• 퍼블릭 클라우드(public cloud)
- 인터넷을 경유하여 불특정 다수에게 제공되는 클라우드 서비스이다.
- 자사에서 데이터센터를 보유하지 않으므로 서버나 네트워크 등 인프라와 관련된 초기 투자가 필요없다.
- 이용하고 싶은 사양으로 된 가상머신이나 스토리지를 선택하고 이용한 시간이나 데이터 양에 따라 요금을 지불함.
- 시스템 이용량이 증가했을 때 인프라 기반을 쉽게 증설(오토스케일)시킬 수 있다.
→ 오토스케일: 시스템 부하에 맞춰 동적으로 서버 사양이나 스토리지 용량을 쉽게 증설시킬 수 있음. 시스템 사용량이 적을 때는 사양을 낮춤으로써 시스템 투자를 줄일 수 있음.
• 프라이빗 클라우드(private cloud)
- 특정 기업 그룹에게만 제공되는 클라우드 서비스
- 퍼블릭 클라우드가 불특정 다수에 대해 제공되는 데 반해 프라이빗 클라우드는 이용자를 한정할 수 있으므로 보안을 확보하기 쉬우며 독자적인 기능이나 서비스를 추가하기 쉽다.
클라우드가 적합한 케이스
1. 트래픽의 변동이 많은 시스템
2. 재해 대책으로 해외에 백업을 구축하고 싶은 시스템
3. 서비스를 빨리 제공하고 싶은 시스템
온프레미스가 적합한 케이스
1. 높은 가용성이 요구되는 시스템
2. 기밀성이 높은 데이터를 다루는 시스템
3. 특수한 요구사항이 있는 시스템
인프라 구성 관리
• Docker에서는 Dockerfile이라는 파일에 인프라의 구성 정보를 기술할 수 있다.
• Dockerfile을 작성하면 컨테이너의 바탕이 되는 Docker 이미지를 생성할 수 있다.
대표적인 인프라 구성 관리 툴
• OS의 시작을 자동화하는 툴
- 서버 OS를 설치하거나 가상화 툴을 설치 및 설정하는 작업을 자동화하기 위한 툴
ex) KickStart(Red hat 계열 Linux), Vargrant(로컬 PC)
• OS나 미들웨어의 설정을 자동화하는 툴
- 데이터베이스 서버, 웹 서버, 감시 에이전트 등과 같은 미들웨어의 설치나 버전 관리, OS의 방화벽 기능의 설정 등 보안과 관련된 설정을 자동화하기 위한 툴
ex) Chef, Ansible(파이썬 기반), Puppet, Itamae
• 여러 서버의 관리를 자동화하는 툴
- 대규모 시스템은 여러 대의 서버로 구축되는데, 이러한 분산 환경의 서버들은 관리하기 위한 툴이 있다.
- 그 중에서도 컨테이너 오케스트레이션의 사실상 표준인 'Kubernetes'는 컨테이너 가상환경에 있어서 여러 컨테이너를 통합 관리하는 툴이다.
- Kubernetes는 그리스어로 배의 키잡이라는 뜻으로, Docker의 이미지 캐릭터인 컨테이너를 실은 고래의 키를 잡듯이 여러 컨테이너를 효율적으로 관리할 수 있다.
* 위 게시글은 완벽한 IT 인프라 구축을 위한 Docker (정보문화사, Asa Shiho 지음, 이영란 옮김) 도서를 참고하여 작성하였습니다.
'Docker' 카테고리의 다른 글
Ubuntu에 Docker 설치 및 Portainer 구축하여 쉽게 관리하기 (0) | 2021.10.08 |
---|---|
윈도우에서 도커(Docker) 설치하기 (Windows 10 Home 포함) (0) | 2021.09.29 |
[Docker] 컨테이너 기술과 Docker의 기능, 작동 구조 (0) | 2021.09.14 |