티스토리 뷰

Development/Cloud

[Cloud]도커(Docker)

Vagabund.Gni 2022. 10. 5. 21:34
728x90
반응형

도커(Docker)는 2013년 발표된 PaaS 리눅스 컨테이너 기술의 일종이자, 사실상의 업계 표준이다.

 

PaaS라는 이름대로 인프라스트럭쳐와 미들웨어 등을 가상화해서 제공하는데,

 

보안상 유리한 격리된 구조기존 리눅스 자원의 활용

 

OS를 가상화하지 않기 때문에 Virtual Machine에 비해 굉장히 가볍다는 장점이 있다.

 

PaaS에 대한 설명은 지난 글에 적어두었다.

 

2022.10.05 - [Development/Cloud] - [Cloud]IaaS, PaaS, SaaS

 

[Cloud]IaaS, PaaS, SaaS

지난 글에서 클라우드 컴퓨팅이란 시스템 리소스를 온디멘드로 제공하는 것을 가리킨다고 했었다. 조금 구체적으로는 벤더사가 리소스를 추상화해 만든 가상 서버를 임대해주는 서비스라고 했

gnidinger.tistory.com

 

Terminology

 

도커에 대해 더 알아보기 전에 자주 쓰는 용어부터 정리하고 가자.

 

Container, Docker Engine

 

앞서 도커는 인프라스트럭쳐와 미들웨어 등을 가상화해서 제공한다고 적었다. 

 

이때 제공하는 패키지를 컨테이너(Container)라 부르며,

 

컨테이너를 관리하는 소프트웨어를 도커 엔진(Docker Engine)이라 부른다.

 

추가로 컨테이너는 표준화되고 캡슐화된 환경의 제공을 목표로 한다.

 

Docker Image

 

도커 이미지, 혹은 이미지는 컨테이너를 빌드하는데 쓰이는 읽기 전용 템플릿이다.

 

조금 더 구체적으로 이미지에는 앱과 그 구성이 담겨있으며, 하나의 이미지로 여러 개의 컨테이너를 생성할 수 있다.

 

또한 기본 이미지를 바탕으로 커스터마이징을 더해 새로운 이미지를 생성하는 것도 가능하다.

 

Registry

 

도커 레지스트리는 도커 이미지를 위한 저장소(Repository)이다.

 

사용자는 이미지의 다운로드나 업로드를 위해 레지스트리에 연결해야 하며,

 

public, private 등의 설정을 할 수도 있다.

 

대표적인 레지스트리로는 Docker Hub가 있으며, 컨테이너 생성 시 호스트 컴퓨터에 이미지가 존재하지 않을 경우

 

이 기본 레지스트리에서 다운로드한다.

 

계속해서 도커의 특징과 장점에 대해 살펴보자.

 

Standardized, Encapsulated Environment

 

직역하면 표준화되고 캡슐화된 환경. 여기서 환경이란 개발 및 실행 환경을 아우르는 단어이다.

 

컨테이너 기술은 한 컴퓨터 안에 여러 개의 서로 다른 환경을 생성함으로써 실행 환경을 격리시키는데,

 

이는 하나의 컴퓨터 안에서 서로 다른 여러 버전의 소프트웨어를 설치 및 실행할 수 있다는 말이 된다.

 

이는 심지어 OS에도 상관없는 협업 시 개발환경의 통일은 물론

 

의존성 충돌과 같은 상황을 방지해 소프트웨어 배포 시의 실행을 보장한다.

 

아마존 ECS와 같은 서비스는 앱을 컨테이너째로 배포할 수 있게 도와주며

 

위 기술을 다음에 나올 수평적 확장과 결합하면 새로운 버전의 앱을 특정 서버 몇 대에서만

 

실험적으로 운영하며 테스트하는 방식도 가능해진다.

 

Isolation

 

그렇다면 컨테이너 기술은 구체적으로 무엇을 격리한다는 것일까? 대략 다음과 같다.

 

  • 프로세스 - 다른 컨테이너로부터 프로세스를 격리. 프로세스로의 다른 컨테이너의 접근이나 다른 컨테이너로의 접근을 막음
  • 네트워크 - 기본적으로 컨테이너 하나당 하나의 IP 주소가 할당
  • 파일 시스템 구조 - 파일 시스템이 구획화 되어있음. 해당 컨테이너에서의 명령이나 액세스를 제한할 수 있음

컨테이너는 위와 같은 격리를 바탕으로 리소스를 격리시키고, 서비스를 제한시키며, 프로세스를 예비해

 

거의 완전히 개인화된 작업공간을 마련할 수 있게 도와준다.

 

Easy to Scale-Out

 

수평적 확장이란 말 그대로 리소스의 개수를 늘려 성능을 확장하는 방법이다.

 

도커를 사용하여 컨테이너를 만들면 다수의 프로세스를 여러 개의 환경에서 구동할 수 있으므로

 

로드 밸런서와 같은 분산 시스템을 생성하는 것이 굉장히 간편하다.

 

또한 더 많은 리소스나 노드가 필요해지는 경우에 자동으로 노드를 배치할 수 있기 때문에

 

수평적 확장이 손쉽게 가능해진다.

 

Virtual Machine(VM) vs. Docker

 

가상 머신(VM)도커프로세스, 네트워크, 파일 시스템을 격리할수 있다는 특징을 공유하는 기술이다.

 

하지만 두 기술의 작동 규칙은 많이 다른데, 우선 아래 그림을 보자.

 

그림에서 볼 수 있듯이 두 기술의 가장 큰 차이점은 운영체제의 필수 설치 여부이다.

 

VM의 경우 운영체제를 반드시 설치해야 하는 반면 도커의 컨테이너는 그 과정이 필수가 아니다.

 

이는 VM과 컨테이너의 리소스 요구와 속도에 커다란 차이를 불러오게 됐는데

 

운영체제 설치 적에 보통 기가바이트 단위로 용량을 차지하는 VM에 비해 컨테이너는 메가바이트 단위의 작은 크기를 가지며,

 

속도 역시 VM에 비해 OS 가상화가 없는 컨테이너 쪽이 훨씬 빠르게 된다.

 

추가로 VM을 관리하는 하이퍼바이저와 컨테이너를 관리하는 도커 엔진의 존재 여부가 차이점이며,

 

리눅스 기반이 아닌 윈도우나 Mac OS의 경우 컨테이너를 사용할 때 자체적인 하이퍼바이저를 구동한다는 특징이 있다. 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함