시뻘건 개발 도전기

[docker] 컨테이너 기술 본문

기타/DevOps

[docker] 컨테이너 기술

시뻘건볼때기 2023. 3. 14. 20:44
반응형

[그림 1] docker

 

흔하게 볼 수 있는 docker짤이다. 대학생 때나 신입 때 누구나 이런 말을 해본적이 있을테지.. "내 컴터에선 왜 안돼?!?!" 코드가 똑같다면 대부분 환경이 달라서 다른 결과가 나오는 경우가 있을텐데, 이것을 해결해주는 것이 Docker라 볼 수 있다.

아래 [그림 2]를 보면 docker의 형태를 알 수 있다.

 

[그림 2] docker 구조

 

앱을 구동하기위한 코드와 종속성, runtime을 하나로 묶어서 local, dev환경을 비롯한 스테이징, 라이브환경 등 다양한 환경에 배포를 할 수 있다.

 

"이 그림에서 docker를 왜 쓰는가?!"에 대한 답을 볼 수 있는데,

  • 개발자가 만들었던 아티펙트가 컨테이너 런타임이 동작하는 어떤 환경에 구애받지 않고 동일한 아티펙트가 동작한다.
  • 개발자가 앱을 빌드하고 배포하는 속도를 향상시킨다.
  • OS 플랫폼 혹은 클라우드 종류와 관계 없이 컨테이너를 배포할 수 있다.
  • 같은 인프라에 더 많은 컨테이너 자원을 사용할 수 있다.
  • 빠른 스케일링을 지원한다.

 


우리가 많이 들어봤을 VM은 어떨까? VM과 docker를 비교할 때 docker는 컨테이너 기반이라고 이야기하는 것을 자주 볼 수 있었다. 아무것도 모르는 시절, "그래서 컨테이너가 뭔데?"라는 물음표를 던진적이 있다. 좀 더 상세하게 VM과 컨테이너 기술을 비교해보는 시간을 가져보자.

[그림 3] VM과 Containers의 비교

VM의 경우에는 하이퍼바이저 위에 VM이 가상화되어서 동작을하고, 머신단위로 할당이 되기 때문에 OS를 설치를 해주어야한다. 반면에 컨테이너 기술은 호스트 운영체제(Host Operating System)가 있고 그 위에 컨테이너를 구동하기 위한 컨테이너 엔진이 있다. 이 컨테이너 엔진 위에서 컨테이너라는 단위로 앱을 배포할 수 있다. 따라서 각각의 컨테이너마다 OS를 설치할 필요가 없다.

 

장단점

VM은 다양한 OS를  실행할 수있지만 컨테이너 기술은 Host OS를 공유하기때문에 단일OS밖에 사용할 수 없다.

VM 믈리머신 대비 빠른 서버 프로비저닝자원의 효율적으로 사용할 수 있지만 Guest OS가 다 올라와야지만 앱을 구동시킬 수 있다는 시간적 단점이 있다.

컨테이너어느 환경이든 배포가 가능하고  OS 부팅이나 라이브러리를 load할 필요가 없다. 또한 가상환경을 경량으로 생성이 가능하며 하나의 호스트에 다수의 앱 실행이 가능하고 OS 패치 등 유지 관리와 관련된 오버헤드가 적다. 하지만 Host OS/커널을 공유하기 때문에 안전하게 isolation을 했지만 클라우드 밴더사와같이 다중 고객환경에서는 리스크를 가지고 있다. 이를 개선하기 위해서는 lightweght 가상화를 구현해서 사용하기도 한다.

 

컨테이너 엔진에 해당하는 녀석이 바로 Docker다.

가상화 기술을 뒷받침하는 하이퍼바이저(Hypervisor)는 가상 머신 모니터라 부르는데, 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 플랫폼이라고 할 수 있다. 하이퍼바이저는 리소스를 에뮬레이션해서 한 대의 서버에 여러 머신 환경을 구성 가능케한다.

 

하이퍼바이저를 사용 구조는 두 가지 종류가 있다. [그림 4]를 참고하자면 Type1의 경우 KVM, Hyper-V 등이 있고 Type2는 VMware, VirtualBox 등이 있다.

 

[그림 4] 하이퍼바이저를 통한 Guest OS  동작

 

반응형

'기타 > DevOps' 카테고리의 다른 글

[linux] 커널  (0) 2023.03.31
[docker] alpine linux 이미지 만들고 실행하기  (0) 2023.03.31
[docker] 다중 운영체제 지원  (0) 2023.03.30
Comments