[DevOps] Docker 그냥 넘어가지말고 한번 보자!

k·2024년 2월 24일
1

DevOps

목록 보기
1/2
post-thumbnail

개발자들이 공부를 할 때 Docker라는 기술을 많이 접하게 된다.
나 또한 많이 접해봤고, 더 이상 애매한 상태로 둘 수 없어서 이에 대해 제대로 정리하려고 한다.

Docker란 무엇인가?

Docker는 리눅스의 응용 프로그램들을 프로세스 격리 기술을 사용하여 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.

이 말이 확실하게 와닿지 않을 수도 있다. 어떤 배경으로 인해서 Docker가 만들어졌는지 이해해야 더 확실히 Docker에 대해서 알 수 있다.

Docker가 생기게 된 배경 (feat. Hypervisor)

초반

초기에는 하나의 서버에 하나의 어플리케이션을 구동할 수 있었다.

하드웨어의 급격한 발전으로, 서버는 소프트웨어가 요구하는 사양에 비해 훨씬 더 높은 수준의 사양을 가질 수 있게 되었다.

이게 무슨 문제일까? 생각할 수도 있다.

쉽게 생각해서 낭비가 가장 큰 원인이었다. 하드웨어가 발전하면서 가격이 상승했는데, 당시의 서버는 하나의 어플리케이션만을 구동할 수 있었기 때문에 여러 어플리케이션을 구동하기 위해서는 어플리케이션 당 서버 하나를 가동해야 했다. 그 결과, 남아있는 리소스가 존재하는 서버에서도 낭비되는 리소스가 발생했다.

요약하면 아래와 같은 문제가 있었다 :

  • 서버 가격이 비싸짐.
  • 하나의 어플리케이션만을 허용하였기 때문에, 낭비되는 리소스가 발생

이러한 기술적인 문제를 어떻게 해결할 수 있을지 고안했고, 하나의 서버 내에서 여러 어플리케이션을 돌리기 위한 방법에 대한 연구가 지속되었다.

중반 (가상화 & Hypervisor 등장)

Hypervisor가 뭘까?

하이퍼바이저는 여러 개의 가상 머신(Virtual Machine, VM)을 생성하고 구동하는 소프트웨어이다.

초반에 서버 내에서 하나의 어플리케이션을 구동하는 것에서 문제가 발생했다. 이를 해결하기 위해서 Hypervisor라는 기술이 등장했다.
Hypervisor 아키텍처

이 사진은 Hypervisor의 아키텍처이다. 하드웨어 위에 Hypervisor를 올려서 N개의 가상 머신을 생성하고, 해당 머신 내에 Guest OS를 생성하여 어플리케이션을 구동함으로써 여러 어플리케이션을 구동할 수 있게 했다.

이 것이 초기 가상화 기술이다.

여러 어플리케이션을 동시에 실행할 수 있는 혁신적인 기술이었지만, 가상 머신에 비해 무겁다는 단점이 있었다. 그 외에도 아래와 같은 대표적인 단점들이 존재한다:

  • 리소스 관리가 어려움.
  • 가상 머신들의 동일한 수준의 성능 보장이 어려움.
  • 가상 머신들이 하드웨어의 리소스를 나눠 가지기 때문에 성능 저하에 문제 발생.

이를 해결하기 위해서는 Hypervisor에 비해 가볍고 빠른 형태의 가상화 방법이 필요했다.

현재

그래서 나온 기술이 Docker이다.

Docker는 리눅스 기반으로 가상 머신보다 가볍고 빠르게 어플리케이션을 패키징하고 실행할 수 있어 리소스의 효율성과 빠른 배포가 가능해졌다.

왼쪽이 Docker에 대한 아키텍처이다.

미리 말해야하는 것은 원래 Docker는 Linux 기반의 서버에서 사용하는 용도로 만들어졌다. 그래서 Host Os(메인 운영체제) 의 Linux 기반 커널을 공유할 수 있었다. 그리고 각 컨테이너화 되어있는 App들은 커널이 제외된 Linux 껍데기로 구성되어있고, 내부적으로 필요에 따라서 NginX나 Node와 같은 소프트웨어가 포함된 형태의 껍데기를 받아올 수 있다.

껍데기는 Linux 를 구성하는 최소한의 요소라고 생각하면 된다.

그럼 Windows에서는 Docker가 안되나요?

Windows에서도 Docker를 지원한다. 그런데 이렇게 말하면 Host OS가 커널을 공유해준다고 했는데, Host OS가 윈도우가 되면 공유하지 못하는거 아닌가? 라고 생각할 수도 있다. 하지만 Windows 버전을 설치하면 Linux 커널과 함께 설치가 되거나, Linux 가 가상화된 형태로 커널을 공유할 수 있도록 해준다.

Docker 가상화 vs Hypervisor 가상화

아키텍처로 확인할 수 있지만, Docker에서는 GuestOs가 없다. 또한 Hypervisor처럼 각 가상머신이 커널을 가질 필요없이 Host OS의 커널을 공유한다. 그렇기 때문에 상대적으로 Hypervisor에 비해서 가벼울 수밖에 없다.

또한 Container내에 Image를 주입하는 형태로 어플리케이션들을 구동하기 때문에, 원하는 버전의 Image를 가져와서 쉽게 환경을 만들 수 있다. 또한 다른 버전으로의 마이그레이션을 원할 때 Container를 날려버리고 새로운 Container에 기존의 데이터를 올리는 형태로 진행 할 수 있다. 즉 Hypervisor에 비해서 Docker는 짧은 라이프 사이클을 가진다는 장점 또한 존재한다.

profile
You must do the things you think you cannot do

0개의 댓글