Docker and VM
도커와 VM
도커와 VM에서 커널의 역할
도커에서의 커널
각 컨테이너에 할당된 CPU, 메모리 등을 관리합니다. 하나의 컨테이너가 자원을 독점하지 못하도록 합니다.
도커는 호스트 운영체제의 커널을 공유하여 실행되며, cgroups와 네임스페이스(namespace)와 같은 리눅스 커널 기능을 사용하여 자원을 격리하고 관리합니다.
VM에서의 커널
CPU 가상화: VM의 가상 CPU(vCPU)를 실제 물리적 CPU에 매핑하여 실행합니다. 커널은 가상화된 CPU 명령어를 처리하고 스케줄링합니다.
메모리 가상화: VM의 가상 메모리를 실제 물리적 메모리에 매핑합니다. 커널은 메모리 할당, 페이지 테이블 관리 등을 수행합니다.
보안 및 격리: 각 VM의 격리된 실행 환경을 제공하여 하나의 VM이 다른 VM에 영향을 미치지 않도록 합니다.
VM의 하이퍼바이저 종류
호스트 하이퍼바이저
기존 운영체제 위에서 실행됩니다. 이 하이퍼바이저는 운영체제의 도움을 받아 가상 머신을 할당하고 제어합니다.
가상 환경 1과 가상 환경 2는 호스트 운영체제 위에서 실행되므로, 하이퍼바이저가 직접 하드웨어를 관리하지 않습니다. 하이퍼바이저는 운영체제를 통해 자원을 할당받습니다.
컨테이너 엔진이란?
컨테이너 엔진은 애플리케이션을 컨테이너로 패키징하고 실행하며 관리하는 소프트웨어입니다. 컨테이너는 애플리케이션과 그 종속성을 하나의 패키지로 묶어, 일관된 실행 환경을 제공합니다.
컨테이너 이미지 생성: 애플리케이션과 그 종속성을 포함하는 컨테이너 이미지를 생성합니다.
컨테이너 실행: 컨테이너 이미지를 기반으로 컨테이너를 생성하고 실행합니다.
자원 관리: CPU, 메모리, 네트워크 등의 자원을 효율적으로 할당하고 관리합니다.
컨테이너의 장점
이식성: 컨테이너 이미지를 사용하면 다양한 환경(개발, 테스트, 프로덕션)에서 일관된 방식으로 애플리케이션을 실행할 수 있습니다.
효율성: 컨테이너는 호스트 운영체제의 커널을 공유하므로, VM에 비해 더 적은 자원을 사용합니다.
빠른 배포 및 시작: 컨테이너는 경량화되어 빠르게 시작하고 중지할 수 있으며, 애플리케이션 배포 시간을 단축할 수 있습니다.
격리성: 각 컨테이너는 독립된 실행 환경을 제공하여, 애플리케이션 간의 충돌을 방지합니다.
도커 호스트 운영체제와 VM 운영체제
도커 호스트 운영체제는 도커 데몬이 실행되고, 컨테이너를 관리하는 주체가 되는 운영체제입니다. 이는 도커 엔진이 설치된 서버나 컴퓨터의 운영체제를 의미하며, 도커 컨테이너가 이 운영체제의 커널을 공유하여 실행됩니다.
VM 운영체제는 하이퍼바이저 위에서 실행되는 게스트 운영체제입니다. 각 VM은 독립된 커널을 포함하며, 하이퍼바이저를 통해 하드웨어 자원을 가상화합니다.
도커 컨테이너화
도커 컨테이너화는 애플리케이션과 그 종속성(라이브러리, 설정 파일 등)을 하나의 패키지로 묶어 일관된 환경에서 실행할 수 있도록 하는 프로세스를 의미합니다. 이 패키지는 마치 OOP의 클래스와 인스턴스 관계에서 클래스를 생각할 수 있습니다.
도커 이미지는 다른 환경에서도 동일하게 실행된다고 했는데, 다른 환경은 어떤 환경을 말하는건가요?
다른 환경은 운영체제의 차이와, 개발 환경, 테스트 환경, 클라우드 환경 등을 포함합니다.
도커 이미지는 호스트 운영체제의 커널을 공유하여, 기본적으로 같은 운영체제 커널 위에서 실행됩니다. 하지만 도커 이미지는 도커 멀티 스테이지 빌드를 통해 특정 운영체제에 맞는 이미지를 만들 수 있습니다. 이를 통해서, 어떠한 운영체제에서든 도커를 실행할 수 있고, 높은 이식성을 보장합니다.
도커 멀티 스테이지 빌드
도커는 호스트 운영체제의 커널을 공유하기때문에, 하나의 운영체제에서 만들어지는 이미지는 기본적으로 같은 운영체제 위에서만 동작을 하게 됩니다.
BUT.
WSL2(Windows Subsystem for Linux2)를 통해 Windows에서 Linux 커널을 사용할 수 있게 해줍니다. K8s와 같은 오케스트레이션 툴을 사용하여 Windows와 Linux 노드를 혼합하여 사용할 수도 있습니다.(각각의 운영체제에서 적합한 도커 이미지를 실행할 수 있게 해줍니다)
도커 멀티 스테이지 빌드 멀티 스테이지 빌드를 사용하여 특정 운영체제에 맞는 이미지를 만들 수 있습니다. (최종 이미지는 여전히 특정 운영체제에서만 실행될 수 있습니다.)
참고자료:
Last updated