새소식

Cloud/Docker

Docker Architecture 그림으로 이해하기

  • -

도커를 더욱 이해하기 위해서 아래 그림을 직접 그려보았다.

Docker 개요

사람들은 왜 도커를 사용할까

도커를 사용하면 복잡한 앱을 여러 컨테이너로 통합하여 실행할 수 있다.
(하나로 합치는 것이 아닌 연결된 msa)

추가로 alpine이 붙는 이미를 사용하면 더욱 가벼워진다.

vm과 비교를 해보면

VM - 하이퍼바이저 위에 [따로 kernel Space와 User Space만들어줌 ]→ 가상화

컨테이너 - 하이퍼바이저와 Kernel Space 위에 [User Space 만들어줌] → 가상화

무거운 Kernel Space가 컨테이너에는 빠져있기 때문에 이처럼 경량화가 가능하다.

이처럼 커널이 빠질 수 있는 것은 LXC라는 기술 덕분이다.

LXC

Linux Container 기술을 이용하며 
kernel의 namespace, cgroup, chroot 사용할 때 필요하다.
이 기술들을 주로 도커에서 필요한 커널 기능들이다.

chroot

서로 다른 독립된 환경을 만들어주며, 서로 다른 프롬프트를 보여준다.

말 그래도 change root로 컨테이너 안의 root를 바꿔준다.

namespace

process(PID) device(mount) network가 컨테이너 생성 시 필요하며
이러한 네트워크 관련된 것들을 제공해준다.

cgroup

필요한 리소스인 cpu, memory, disk를 제공해준다.

정리하자면,

chroot 독립된 컨테이너 환경,
cgroups 생성된 컨테이너에 자원 할당,
network namespace는 컨테이너에 up 등을 배치하여 독립된 가상환경 제공한다.

docker engine

  • App 안 dockerd - 컨테이너 런타임
  • Docker 엔진 안 - containerd
    • runc가 생성한 컨테이너 lifecycle을 관리한다.
  • runc - kernel과 통신할 수 있는 유일한 라이브러리
    • runc가 커널로부터 자원을 받아서 컨테이너를 생성하며 containerd가 관리
    • kernel과 소켓 통신을 한다.

 

도커란

하드웨어 가상화 없이 격리된 환경에서 실행되는 프로세스를 말한다.
즉, 프로세스의 표준화된 격리이다.

 

'Cloud > Docker' 카테고리의 다른 글

Docker CPU 제어하기  (0) 2024.03.25
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.