DailyStudy/Docker

도커(Docker) 란? & Docker Container 그리고 가상화 방식의 종류

Dev_0andWild 2022. 10. 24. 16:20
728x90

 

 

도커(Docker)란 무었일까?

Docker는 오픈 소스 컨테이너화 플랫폼 입니다. 이 컨테이너화를 통해 하나의 컴퓨터 환경에서 다른 컴퓨터 환경으로  빠르고 안정적이게 애플리케이션이 실행될 수 있도록 코드와 종속성을 패키징하는 소프트웨어의 표준 단위 입니다. 

 

필자는 Docker하면 떠오르는 두 가지가 컨테이너와 이미지 인것 같아요 =)

여기서 이미지는 코드,런타임,시스템 도구, 시스템 라이브러리 및 설정과 같이 어플리케이션을 실행하는 데 필요한 모든 것을 포함하는 가벼운 독립 실행형 소프트웨어 패키지 입니다. 이렇게 말하면 어려울 수 있지만 쉽게 생각해보면 ubuntu 환경을 예시로 우리가 Jenkins를 다운받아 실행을 하려할 때 $ sudo apt-get install jenkins 를 하면 jenkins를 실행시키기 위한 여러 패키지 들이 다운받아지는 것을 확인할 수 있죠? 반대로 Docker를 설치한 후 Jenkins를 Docker Container로 실행시키기 위해선 우선 Jenkins 이미지가 필요합니다. 그럼 우리는 $ docker pull jenkins/jenkins:lts 를 입력하여 jenkins image를 다운받게 됩니다. 이 이미지에는 Jenkins를 실행시키 위한 모든 패키지들이 들어있는 거죠!

 

그럼 여기서 궁금증이 하나 생길텐데요 ㅎㅎ

필자의 경우에는 Docker image는 어디에서 다운을 받아오는 걸까? 라는 궁금증이 들었습니다 =)

 

Docker에는 docker image를 업로드해서 공유하는 저장소를 docker registry 라고 합니다(Docker의 깃헙이라고 생각하시면 편하겟네요 ㅎㅎ). 대표적인 registry는 Docker의 공식 레지스트리인 Docker Hub 가 있습니다. Docker Hub에는 업체에서 제공하는 공식 이미지를 다운 받을 수 있죠 =)

 

이렇게 우리는 여러 이미지들을 docker registry를 통해 다운받을 수 있고, 이 이미지들을 실행시켜 컨테이너화를 합니다. 그럼 각각의 컨테이너들이 하나의 컴퓨터에서 독립된 환경에서 실행되듯이 할 수 있는거죠. 아래 사진을 보시면 어떠한 느낌인지 이해가 되실겁니다 =)

 

 

참고: https://www.docker.com/resources/what-container/

 

이러한 Container 방식은 하나의 인스턴스 안에서 여러개의 격리된 인스턴스를 갖출 수 있도록 하는 서버 가상화 방식입니다. 이렇게 격리된 컨테이너들은 사용자 관점에서 보았을 때 각각이 하나의 서버처럼 보이는거죠.

 

또한 Container는 Docker만의 것이 아닌 하나의 방식일 뿐입니다! 이러한 Container 기술은 Docker 이외에도 OpenVZ, Libvirt, LXC 등이 존재 한다고 합니다.

 

이어서 Docker의 Container는 가상화 방식의 일종인데 가상화 방식은 여러 방식이 존재 합니다.

다른 방식들을 살펴보고 Container 방식의 장단점을 확인해보죠!

 


가상화 방식의 종류

 

 

 

1. 호스트 가상화

 

호스트 가상화는 Base인 Host OS 위에 Guest OS 가 구동되는 방식입니다.

즉, Host OS(Windows, Mac OS, Linux...)가상화 소프트웨어를 설치하여 이 위에서 Guest OS를 작동시키는 기술입니다. 이 가상화 SW 종류로 VM Workstation, VM Server, VMware Player, MS Virtual Server, Virtual Box, Virtual PC 등이 존재합니다 =)

 

출처: ThinkGround

 호스트 가상화 방식의 장점 

- 설치와 구성이 편리함

- 가상의 하드웨어를 에뮬레이팅 하여 호스트 운영체제에 크게 제약사항이 없음

에뮬레이팅 이란?
: 에뮬레이팅이란 하나의 예시로 리눅스 기반으로 만들어진 것을 윈도우 위에서 실행시키고자 할 때 윈도우에서 실행시켰으나 실행시키는 곳이 마치 리눅스 기반 OS라고 인식하게 만들어 속여서 동작시키는 방식을 말합니다.

포팅 이란?
: 포팅은 위의 예시의 리눅스 기반으로 만들어진 것을 윈도우 기반으로 다시 프로그램을 만드는 것입니다.

참고: 에뮬레이팅과 포팅 그리고 안드로이드 에뮬레이터
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=soldout92&logNo=221119755585

 호스트 가상화 방식의 단점

- Host OS에서 다른 Guest OS를 구동하기 때문에 오버헤드가 크다. 즉, 간편하게 사용할 수 있지만 사양이 낮은 컴퓨터의 경우 속도가 현저하게 느려짐.

오버헤드란?
: 가상화를 수행하기 위해 필요한 CPU 자원, 디스크 용량, 메모리 사용량 등을 말합니다.

 

 

 

2. 하이퍼바이저 가상화

 

하이퍼바이저 가상화는 Host OS없이 하드웨어 위에 소프트웨어인 하이퍼바이져를 설치하여 가상화를 구성하는 방식입니다. 종류로는 Microsoft Windows Server의 Hyper-v, Citrix의 XenServer, Vmware의 ESX Server 등이 있습니다 =)

 

 

출처: ThinkGround

 

하이퍼바이저 가상화 방식의 장점

- 별도의 Host OS 가 없이 하드웨어를 직접 제어하기 때문에 효율적으로 리소스를 사용할 수 있음

 

하이퍼바이저 가상화 방식의 단점

- 가상환경마다 별도의 OS가 작동하여 가상환경 시작에 걸리는 오버헤드가 커짐

- 자체적으로 머신에 대한 관리 기능이 없기 때문에 관리를 위한 컴퓨터나 콘솔을 필요로함

 

하이퍼바이저 가상화는 전가상화(Full-Virtualization or Hardware Virtual Machine)와
반가상화(Para Virtualization)로 분류됩니다.


전가상화 방식이란?
: 전가상화는 하드웨어를 완전히 가상화 하는 방식입니다. 하이퍼 바이저가 구동되면 하이퍼바이저 관리용 가상머신(DOM0)이 실행되며, 모든 가상머신들의 하드웨어 접근이 해당 관리 머신(DOM0)을 통해 이루어집니다. 즉, 모든 명령에 대해 DOM0가 개입을 하게 되는거죠. 이러한 DOM0의 역할로 가상화된 OS가 무엇이든지 간에 각 OS들이 내리는 명령어를 알아들을 수 있습니다. Window의 Add, Linux의 ADD, Mac OS의 add 라는 명령이 내려졌을 때 하이퍼바이저가 모든 Guest OS들이 알아들을 수 있게 번역을 해주는 것입니다. 또한 하이퍼바이저는 가상화된 OS들에게 resource를 할당하는 역할을 합니다. =)

장점
- 하드웨어를 완전 가상화하여 Guest OS의 커널등의 수정이 필요없음
단점
- 하이퍼바이저의 관리용 가상머신이 모든 명령을 중재하고 번역하기에 비교적 성능이 느려질 수 있음


반가상화 방식이란?
: 반가상화는 전가상화와 유사한 점이 많지만 전가상화와 달리 하드웨어를 완전히 가상화 하지 않습니다.
전가상화 방식의 성능 저하 문제점을 개선하기 위해 별도의 하이퍼콜(Hyper Call)이라는 인터페이스를 통해 명령하게 됩니다. 즉, 가상화된 각 OS들이 각각 다른 번역기를 갖게 되는 것입니다.

장점
-모든 명령을 DOM0를 통해 하이퍼바이저에게 요청하는 전가상화 방식에 비해 빠름
단점
-하이퍼 바이저에게 Hyper Call 요청을 할 수 있도록 각 Guest OS의 커널을 수정해야하며, 오픈소스가 아닌 OS의 경우 반가상화를 사용하기가 어렵다고함

 

 

 

3. 컨테이너 가상화

 

컨테이너 가상화는 Host OS위에 컨테이너 엔진을 설치하고, 논리적으로 컨테이너를 나누어 사용합니다.

컨테이너는 애플리케이션 작동에 필요한 바이너리, 라이브러리 등으로 구성되고, 각각  별도의 서버인 것 처럼 사용이 가능합니다. 컨테이너 방식은 하이퍼바이저 처럼 시스템의 전반적인 것을 가상화하지 않고, 애플리케이션을 구동할 수 있는 환경인 CPU와 Memory 영역 등을 가상화 하고 구동하는데 필요한 운영체제나 라이브러리는 호스트 시스템과 공용으로 사용합니다. =)

 

출처: https://tpcable.co.kr/45

 

컨테이너 가상화 방식의 장점

- 컨테이너 가상화는 속도가 빠르고 자원소비율이 적기 때문에, 같은 자원을 같고 있는 Host 시스템에서 더 많은 애플리케이션을 가상화 기반 위에 동작시킬 수 있음.

 

컨테이너 가상화 방식의 단점

- 호스트 시스템에서 제공하는 운영체제와 같은 환경에서만 제공한다는 단점이 있음

예를 들면 Docker 환경(Linux)에서 Windows Application 실행은 어려움. 이러한 이유는 Container 기술이 운영체제와 실행 실행 바이너리, 라이브러리 등을 호스트 시스템과 공유하면서 애플리케이션 실행환경만 가상화하여 제공하는 기술이기 때문이라고 한다. (+ Docker Enterprise Edition에서는 Windows 환경을 지원하고 있다고 합니다!)

 

 


Container 기술을 사용하는 이유

 

Container 방식과 다르게 다른 가상화 방식은 CPU, 메모리, 디스크, 구동중인 운영체제와 각종 라이브러리까지 전체 영역을 독립적으로 구분하여 사용합니다. 그렇기 때문에 각 VM은 위의 모든 것을 포함하고 있기에 수십GB를 차지하게 되는거죠. 하지만 Container 방식은 소프트웨어가 실행할 때 필요한 라이브러리 및 설정들만 포함되기 때문에 VM보다 적은 공간을 차지하게 됩니다. 보통 Container를 생성하는 Image의 크기는 수십MB 정도이기에 Container는 VM보다 공간을 효율적으로 사용할 수 있고 가볍습니다. =)

 

 또한 Hypervisor 기반의 가상환경에서 애플리케이션을 구동하기 위해선 해당 가상 머신이 완전히 실행된 후 애플리케이션이 동작하게 되기 때문에 실제 애플리케이션이 구동하기까지 시간이 걸립니다. 하지만 Container는 이미 시스템이 동작되고 있는 상태에서 애플리케이션 부분만 가상화되어 실행되기 때문에 속도가 훨씬 빠릅니다. 추가적으로 가상화된 시스템이 각 운영체제 등을 동작하기 위해 사용하는 자원을 Container에서는 사용하지 않기 때문에 자원의 소비율 역시 적습니다.

 


 

 

이렇게 Docker와 Container 가상화 방식 그리고 다른 가상화 방식에 대하여 알아보았고 다음 글에선 기본적인 Docker 의 사용방법에 대하여 알아보도록 하겠습니다 =)

 

 

 

(참고글)

 

 

What is a Container? - Docker

A container is a unit of software that packages code and its dependencies so the application runs quickly and reliably across computing environments.

www.docker.com

 

[Docker] 컨테이너와 서버 가상화 기술

컨테이너란 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있

nomad-programmer.tistory.com

 

 

한방에 이해되는 가상화 기술 용어 정리

가상화 기술이 궁금할 때... 안녕하세요. 이번 포스트에서는 가상화 용어 중 헷갈릴 수 있는 용어들을 정리해보려고 합니다. 전가상화/반가상화 같은 용어들을 보거나 들었을 때 아~ 감은 잡히는

tech.ktcloud.com

 

 

[소개] 가상화의 종류3가지

  1) 호스트 가상화 : 호스트가상화는 Base가 되는 Host OS위에 Guest OS가 구동되는 방식입니다. 종류로는 VM Workstation, VMware Server, VMware Player, MS Virtual Sever, Virtual PC, Virtual Box, Paralles Workstation 등이 있

tech.cloud.nongshim.co.kr

 

 

하이퍼바이저형 가상화(Hypervisor Virtualization) - ThinkGround

하이퍼바이저는 하드웨어 상에 가상화를 전문으로 수행하는 소프트웨어인데, 2가지 타입으로 나누어서 볼 수 있다고 한다. 첫번째는 native(or bare-metal) 타입인데 이 형태는 하드웨어 바로 위에서

thinkground.studio

 

 

도커(Docker), 컨테이너(Container)에 대해.. (가상화 종류)

가상화 기술은 크게 3가지로 나눌 수 있다. 1. 호스트 가상화 2. 하이퍼바이저 가상화 3. 컨테이너 1. 호스트형 가상화 : Host OS(예를들면  Win10, MAC OS)에 가상화 SW를 설치해서 이 가상화 SW에서 Guest

tpcable.co.kr

 

 

[Docker 기본(3/8)] Container는 뭘까?

Docker는 Application의 배포와 운영을 쉽게 도와주는 ‘Containers as a Service(CaaS) Platform이며, Client-Server Model로 동작하고 있습니다. 여기서 Container란, 운영체제의 커널이…

medium.com

 

728x90
반응형