너굴 개발 일지

[Docker] Docker Host OS와 Container OS가 다를 수 있는 이유 본문

DevOps

[Docker] Docker Host OS와 Container OS가 다를 수 있는 이유

너굴냥 2023. 8. 14. 23:40

Docker는 Host OS에 상관 없이 다양한 Linux 배포판의 Container를 올릴 수 있습니다.

예를 들면 Host OS는 Ubuntu지만 Container는 CentOS일 수 있습니다.

이것이 가능한 이유를 알기 전에 Linux, Linux 배포판이 무엇인지 알아보겠습니다.

Linux

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4

Linux는 컴퓨터 OS 커널의 일종인 Linux 커널, 또는 Linux 커널을 사용한 운영체제를 뜻합니다.

여기서 Linux는 크게 커널 영역, 사용자 영역으로 분리됩니다.

사용자 영역은 애플리케이션이 실행되는 공간으로, 애플리케이션 실행을 위한 라이브러리나 환경을 제공하는 system daemon이 존재합니다.

커널 영역은 하드웨어 리소스를 제어하고 관리하는 역할로, 사용자 영역으로부터 System Call을 통해 커널 영역에게 하드웨어 리소스 할당을 요청하게 됩니다.

 

Linux 배포판

흔히 사용하는 CentOS, Ubuntu 모두 Linux 배포판으로 Linux 커널을 기반으로 각각의 foundation에서 추구하는 철학에 맞게 패키지, 라이브러리, UI 환경을 구성해 배포한 OS입니다. 이때, 패키지, 라이브러리, UI 환경은 사용자 영역을 의미합니다.

따라서 각각의 배포판은 각 foundation에서 관리하지만, Linux 커널 관리는 Linux foundation에서 공통으로 관리합니다.

 

namespace

컨테이너 기반의 가상화 기술인 Docker 구현의 핵심 기술 중 하나인 Linux namepsace로 Docker Host OS와는 무관하게 다양한 Container를 올릴 수 있습니다.

Linux namespace는 Linux 커널의 기능으로 하나의 시스템을 마치 독립된 시스템 공간으로 구성되도록 격리시키는 기능으로 Linux의 사용자 영역을 격리시킵니다.

즉, 각각이 완전히 분리된 환경처럼 보이지만 실제로는 사용자 영역을 가상화시켜 분리한 기술이므로 동일한 커널 영역을 사용합니다.

각각의 Linux 배포판은 대부분 Linux 커널 위에 다양한 패키지 관리 시스템이 사용자 영역에 구성되었기에 namespace는 커널 영역을 공유하고 사용자 영역을 격리하는 것이므로, 이를 이용해 충분히 다양한 Linux 배포판을 제공할 수 있습니다.

하지만 Docker는 커널을 공유하는 특징으로 인해 주의점도 존재합니다. 컨테이너는 Host OS 커널에 의존적이므로 Host의 커널에서 어떤 작업을 진행할 경우, 모든 컨테이너에 영향을 줄 수 있습니다.

참고로 Docker 이미지로부터 생성된 컨테이너는 Host, Linux 커널을 공유하는 프로세스로서 동작하기에 Linux 배포판 이미지가 완전한 OS로서 동작하는 것은 아니며 Linux 배포판 이미지는 그대로 사용되기보다는 특정 프로세스를 실행하기 위한 환경을 제공하고, 이를 다시 이미지로 만들기 위한 베이스 이미지로 활용됩니다. 

 

참고 자료

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4

 

리눅스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 리눅스(Linux)개발자리누스 토르발스 (커뮤니티 주체)프로그래밍 언어C, 어셈블리어OS 계열유닉스 계열상태사용중,개발 중소스 형태오픈 소스최초 버전 출시일19

ko.wikipedia.org

https://en.wikipedia.org/wiki/Linux_namespaces

'DevOps' 카테고리의 다른 글

Github Actions 관련  (5) 2024.09.08
[Github] 좋은 PR의 기준이 뭘까?  (0) 2023.12.29