이 글에서는 Docker를 공부한 내용을 정리하려고 한다.
Docker
를 알기전에는 가상화
에 대해서 알아야한다.
먼저, 가상화
를 정의해보자면 하나의 물리적 컴퓨터 자원을 여러 개의 가상 환경으로 나누어 사용하는 기술이다.

왜 이러한 환경이 등장했을까? 이를 알아보려면 과거로 돌아가야한다.
가상화가 등장한 배경
비싼 돈주고 서버를 사서 사용중지만 아래 그림과 같이 CPU 사용률이 현저히 낮은 서버들을 그대로 두게되는 경우가 많았다. 이는 결국에 리소스 낭비와 돈 낭비라는 문제가 발생하게 된다.

그렇다고 아래 그림과 같이 모든 서비스들을 한 서버에 올리게 되면 안정성이 현저히 떨어지는 문제가 발생하게 된다.

따라서, 이러한 문제들을 해결하기 위해 즉, 안정성을 높이며 리소스도 최대한 활용할 수 있는 방법으로 가상화가 등장했다.
대표적으로는 가상 머신(Virtual Machine)
과 컨테이너(Container)
가 있다.
가상 머신(Virtual Machine)

가상 머신
이란 하드웨어 위에 가상으로 생성된 컴퓨터 시스템을 말한다. 실제 하드웨어 없이 소프트웨어만으로 CPU, 메모리, 디스크 등 컴퓨터 자원을 가상으로 제공해서, 독립된 컴퓨터처럼 운영체제와 애플리케이션을 실행할 수 있다.
가상 머신
(Guest OS)는 Hypervisor
를 통해 생성된다.
Hypervisor
는 가상머신
을 생성하고 관리하는 소프트웨어로, 물리적 하드웨어 자원을 가상화하여 각 Guest OS들이 마치 독립된 시스템처럼 운영될 수 있도록 자원을 할당하고 조정하는 역할을 한다.
대표적으로는 VMware와 Virtual Box등이 있다.
가상 머신의 장점
리소스 효율성
: 물리 서버 하나에 여러 가상 머신을 운영함으로써 서버 자원을 효율적으로 사용한다.독립성
: 각 가상머신은 독립적으로 실행되기 때문에 한 가상머신의 문제가 다른 가상머신이나 호스트 시스템에 영향을 미치지 않는다.유연성 및 확장성
: 가상머신을 쉽게 추가하거나 삭제할 수 있어, 테스트, 배포 환경에 적합하다.다양한 OS 실행 가능
: Host OS와 상관없이 Guset OS를 설치하고 실행할 수 있다.
이러한 장점 덕분에 다양한 환경에서 필수적인 도구로 자리 잡고 있지만, 단점 역시 존재한다.
가상 머신의 단점
성능 및 속도 저하
: 시스템 자원을 가상화하여 독립된 공간은 Hypervisor를 무조건 거쳐야해서 일반 Host에 비해 성능과 속도가 저하된다.많은 시간 소요 및 메모리 사용량
: Guest OS를 별도로 설치해야 하고, PC처럼 별도로 환경설정 등을 세팅해야하기 때문에 시간과 메모리가 많이 소모된다.이미지의 크기가 매우 커짐 (무거움)
: Guest OS를 사용하기 위한 라이브러리, 커널 등 필요한 파일을 모두 포함해야하기 때문에 가상머신을 배포할 때 만들어지는 이미지의 크기가 매우 커지게된다.
이러한 단점을 해결하기 위해, 컨테이너
와 같은 경량화된 대안이 등장했다.
컨테이너 (Container)

컨테이너
는 애플리케이션과 그에 필요한 모든 파일, 라이브러리, 설정 등을 포함한 실행 환경을 가상화하는 기술이다.
가상머신
과는 달리, 컨테이너
는 운영체제를 포함하지 않고 Host OS의 커널을 공유하여 실행된다. 이로 인해 더 가볍고, 자원 소모가 적으며, 빠르게 실행될 수 있다.
컨테이너
는 가상화 기술을 사용하여 독립적인 실행 환경을 제공하지만, 가상 머신
과는 달리 프로세스 단위의 격리환경을 제공한다. 이는 가상 머신
이 OS를 가상화하는 방식과는 차이가 있으며, 컨테이너
는 Host OS의 커널을 공유하여 실행되므로 시스템 자원을 보다 효율적으로 사용할 수 있다. 또한, 가볍고 빠르며 이식성이 높다.
컨테이너
안에는 애플리케이션을 구동하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 이미지의 용량이 가상 머신
에 비해 훨씬 작고 배포하는 시간도 빠르다는 장점이 있다.
결과적으로 컨테이너
는 가상 머신
과 비교하여 향상된 성능을 보여준다.
Docker
는 이러한 컨테이너
를 생성, 관리 배포하는 데 사용되며, 빠르고 일관된 환경 구축을 지원한다.
가상 머신 vs. 컨테이너 정리

가상 머신
- Hypervisor를 사용한다.
- Hypervisor를 무조건 거쳐야 한다. → 속도 및 성능 저하
- OS 설치 필요 및 해당 환경을 구동하는 데 필요한 파일을 모두 포함한다. → 이미지의 용량이 매우 커짐 (무거움)
컨테이너
- Hypervisor를 사용하지 않는다.
- 프로세스 단위의 격리 환경을 제공해 Host OS 커널을 공유한다. → 속도 빠름
- 필요한 파일이나 특정 라이브러리 등만 포함한다. → 이미지의 용량이 작음 (가벼움)
하지만 컨테이너
가 마냥 좋은 것은 아니다. 예를 들어, 컨테이너는 운영체제를 가상화하지 않기 때문에, 보안 측면에서 가상 머신
보다는 취약할 수 있다. 또한, 가상 머신
을 통해 새 소프트웨어를 쉽게 테스트 할 수 있는데 소프트웨어로 인해 문제가 발생하면 가상 머신
을 쉽게 재설정하거나 삭제할 수 있기 때문이다. 이렇듯, 각 기술은 용도와 환경에 따라 장단점이 있으므로, 적절한 선택이 중요하다.
마무리
이번 글에서는 Docker
를 하기 전에 알고 있어야 할 가상화
와 가상머신
, 컨테이너
에 대한 내용을 간단히 정리해보았다. 다음으로는 컨테이너
를 생성, 관리 배포하는 데 사용할 수 있는 Docker
에 대해 포스팅할 예정이다.
'Docker 및 Kubernetes > Docker' 카테고리의 다른 글
[Docker] 5. Docker Hub란 (0) | 2025.01.21 |
---|---|
[Docker] 4. 간단한 Docker 실습 (0) | 2024.11.19 |
[Docker] 3. Docker 설치 및 명령어 (1) | 2024.11.19 |
[Docker] 2. Docker란? (0) | 2024.11.15 |