FeelingXD

[Docker] Docker 와 VM🐬 본문

프로그래밍

[Docker] Docker 와 VM🐬

FeelingXD 2024. 2. 21. 16:09

이 글에서는 가상화 종류인 Docker에 대해서 작성합니다.

Docker

Docker는 Docker , inc 가 개발중인 컨테이너 환경을 제공하기 위한 소프트웨어입니다.

Docker는 애플리케이션이 움직이는 환경을 컨테이너라는 단위로 가상화하고, 이 컨테이너형 가상화 뿐만아니라 컨테이너의 베이스가 되는 이미지를 효율적으로 만드는(빌드) 기능과 이미지를 배포하기 위한 구조(Docker Hub)도 갖추고 있는 것이 특징입니다.
이 글에서는 Docker의 구조 특히 컨테이너형 가상화와 이미지에 관한 부분을 간단하게 설명합니다.

VM 과 Docker

Docker가 제공하는 가상화의 큰 장점은 효율성입니다. 이 효율성은 도커가 컨테이너 형식의 가상화를 제공하기 때문에 실현되는것인데 지금까지 사용되었던 기타 가상화 프로그램( VMware 등) 은 호스트 컴퓨터위에 전 가상화를 한 서브컴퓨터 를 실행합니다.

docker, VM 차이

docker(좌) 환경이 vm(우) 환경보다 더 가벼운 형태를 취한다.
docker 는 다음과 같은 형태이다. 인프라 -> hostOS -> dockerEngine -> application,A,B,C .. .
VM 은 다음과 같은 형태이다. 인프라 -> 가상화 -> application a,b,c

단계순서는 vm이 더적어보인다 하지만 각 어플리케이션마다 실행 OS 가 들어있기 때문에 환경에 따라 다르겟지만 기본적으로 VM 이 실행하는 프로그램이 더 무거울 수 있습니다.

컨테이너 가상화

DockerEngine(Docker 구동기)는 기본적으로 VM과 달리 따로 OS를 포함하지않는 대신 HostOS에서 자원을 할당받아 사용합니다. docker container 에서 자원이 필요할때 host의 커널을 통해 자원을 사용하게 됩니다.

이때의 장점은 hostOS 가 각 컨테이너를 프로세스 단위로 실행하고 자원양을 조절할 수 있습니다. 또 문제되는 컨테이너를 재실행 하는등 추가작업에도 hostOS가 직접 관여할 수 있스빈다.

반면 VM 의 경우 hostOS 위에 hiperVisor로 각 가상화를 실행합니다. 자원분배는 다음과 같이 진행됩니다. hostOS -> hypervisor -> guestOS 이과정속에서 hostOS는 Hypervisor에 할당한 자원만 알 수있고 그위에 실행되는 guestOS 등 실행에 관여할수는 없습니다. 시스템 프로세스에는 한프로세스로 표시되기에 자원이 어떻게사용되는지 추적하는데 어려움이 있습니다.

그럼 Docker가 항상 좋은거 아닌가요 ?

항상 기술에는 tradeoff가 있듯 VM과 docker 도 마찬가지 입니다. docker의 장점은 hostOS를 공유하고 각 컨테이너가 hostOS의 자원을 사용할 수 있기에 성능 면에서 이점이 있을수있지만 만약 외부로 공개된 docker contianer 에서 커널을 접근할 수 있다면 이는 hostOS의 제어 또한 할수 있음을 의미합니다.

반면 VM 의경우 hostOS위에 각각의 OS를 실행하므로 가상화 컴퓨터접속후 커널을 공격당해도 hostOS위의 OS의 커널이 공격당한거기에 hostOS는 docker의 경우에 비해 안전하다고 할 수 있습니다.

VM 과 Docker를 같이 써볼까? ✨

그럼 docker를 안전하게 사용하기위해서 어떤방법을 사용할 수 있을까요 ? 바로 VM과 같이 사용하는 방법입니다.

🤔 그럼 두가지 단점을 혼합하는 방법아닌가요 ? VM은 보안상의 이점이 있지만 guestOS 무게로 인해 무거워 지지 않을까요 ?

최근 에 VM 상품들 또한 과거보다 개선된 경량OS 를 제공하고 있습니다. 이를 통해서 VM환경이라도 가벼운 GuestOS를 생성하여 각각의 머신을 돌릴수있습니다. 그리고 그위에 DockerContianer를 배치 해서 기존에 docker의 취약한점을 VM으로 보완하는 방법을 사용하는거지요. 또 이런 방법은 각 guestOS 마다 dockerengine 이 다르므로 공격이오더라도 해당 guestOS 를 사용중지하는등의 방법으로 보호할수 있고 다른 GuestOs를 통해 서비스를 지속할수도 있습니다.

참고한글

도커 와VM 같이 사용하기
wsl 와 도커

'프로그래밍' 카테고리의 다른 글

[Kotlin] - 코틀린 컴파일 과정  (0) 2024.06.22
[Git] - Git 브랜치 전략 😸  (0) 2024.06.01
Λ - 람다 함수가 뭐에요? 🤔  (0) 2024.02.05
객체 지향 프로그래밍 .md 👀  (0) 2024.01.22