• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    해결됨

컨테이너 커널 관련 질문

24.05.07 02:27 작성 조회수 173

1

안녕하세요.

컨테이너 커널 관련한 질문입니다.

하이퍼바이져와 컨테이너를 비교하신 설명을 듣다가 문의드릴게 있어 이렇게 글 남깁니다.

컨테이너는 호스트 os의 커널을 공유하기 때문에 vm에 이기종 os를 구성하는 것처럼 다른 os 이미지로 컨테이너를 만들 수 없다. --> 여기서 질문 드릴게 있습니다.

  1. 컨테이너는 호스트 os의 커널과는 별개로 자체 커널을 보유하고 있지 않다가 맞는거죠 ?

  2. nginx 이미지를 도커 허브에서 다운 받아서 컨테이너를 실행한 다음 해당 컨테이너에 쉘 환경으로 접속해 확인해보면 호스트 os의 환경과는 구성이 다르던데, 그렇다면 이건 nginx 이미지를 다운 받을 때 nginx가 설치되고 구성된 리눅스 OS 환경도 같이 다운을 받는건가요 ?(nginx 프로그램만 다운을 받는다고 해서 동작이 안될꺼고, nginx 서버가 구성이 되어야 동작이 될텐데, nginx 이미지만 받았지 프로그램이 설치되고 구성되는 OS에 대한 설정은 해준게 없어서요. 물론 예를 들어 우분투 이미지를 다운 받고 여기서 nginx 구성을 자체적으로 해주어도 되고, 도커파일로 이미지를 빌드해줘도 되지만 nginx 이미지만 다운 받는데 어떻게 제 호스트 os가 뭔지 알고 그에 맞춘 이미지 파일을 다운받을 수 있을까요 ?)

  3. ec2를 활용한다고 가정할 떄 ec2의 AMI는 아마존 리눅스를 사용하고 도커 이미지는 우분투 이미지를 다운받아 컨테이너를 실행한다면, 이 떄에는 아마존 리눅스의 커널과 우분투 커널이 100% 일치하지 않을 텐데 이런 건 어떻게 동작이 되나요 ?
    감사합니다.

답변 2

·

답변을 작성해보세요.

0

인프린님 안녕하세요. 데브위키입니다.

 

  1. 컨테이너는 호스트 os의 커널과는 별개로 자체 커널을 보유하고 있지 않다가 맞는거죠 ?

-> 네 맞습니다. 컨테이너는 호스트OS의 커널을 공유합니다.

 

  1. nginx 이미지를 도커 허브에서 다운 받아서 컨테이너를 실행한 다음 해당 컨테이너에 쉘 환경으로 접속해 확인해보면 호스트 os의 환경과는 구성이 다르던데, 그렇다면 이건 nginx 이미지를 다운 받을 때 nginx가 설치되고 구성된 리눅스 OS 환경도 같이 다운을 받는건가요 ?

-> 네 정확합니다. 이 부분은 리눅스 OS에서 커널을 제외한 파일 시스템만 포함되어 있습니다! nginx이미지는 자체적으로 OS(파일시스템 영역)를 포함하고 있습니다.

 

  1. ec2를 활용한다고 가정할 떄 ec2의 AMI는 아마존 리눅스를 사용하고 도커 이미지는 우분투 이미지를 다운받아 컨테이너를 실행한다면, 이 떄에는 아마존 리눅스의 커널과 우분투 커널이 100% 일치하지 않을 텐데 이런 건 어떻게 동작이 되나요 ?

도커 허브의 이미지를 확인해 보시면, 아래와 같이 CPU아키텍처(커널)별로 버전이 다르게 있다는 것을 알 수 있습니다.

image

윈도우에서 도커 데스크탑을 사용하실 경우 일반적으로 amd64이고, 맥OS의 경우 arm64를 사용합니다. 이미지는 파일시스템만 포함되어 있기 때문에 우분투 이미지이더라도 여러 개의 커널 호환 버전이 존재할 수 있습니다. 그리고 이미지를 다운로드 하실 때, 실습PC의 아키텍처에 맞게 자동으로 다운로드 해줍니다. 만약 여기에 일치하는 버전이 없을 경우 정상적으로 실행되지 않을 수 있습니다!

 

강의 들으시면서 더 궁금하신 부분이 있으면 편하게 질문해주세요! 😊

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.07

안녕하세요, 인프런 AI 인턴입니다.

인프린님의 컨테이너와 관련된 궁금한 점에 대한 답변을 준비했습니다.

질문자님께서 궁금해하신 컨테이너의 커널 관련 내용에 대해서는, 컨테이너가 호스트 OS의 커널을 공유한다는 개념에 대해 더 알아보시면 이해에 도움이 될 것 같습니다. 본래 컨테이너는 호스트 OS의 커널을 공유하며, 호스트 커널 위에서 별도의 격리된 사용자 공간(User Space)을 제공합니다. 이는 컨테이너가 왜 가볍고 빠른지를 설명하는 핵심 요소 중 하나입니다.

  1. 예, 컨테이너는 자체적인 커널을 보유하고 있지 않습니다. 대신 호스트 OS의 커널을 공유하여 사용합니다.

  2. Docker 이미지에는 필요한 실행 환경과 라이브러리, 응용 프로그램의 바이너리(이 경우 nginx)가 포함되어 있습니다. 즉, nginx 이미지를 다운로드할 때 해당하는 리눅스 환경의 설정과 필요 파일들도 함께 다운로드되어 컨테이너 내에서 동작하게 되는 것입니다. 이러한 이미지들은 특정 OS에 맞춰져 있는 것이 아니라, 호스트 OS의 커널 기능을 사용하여 컨테이너화된 환경을 제공합니다.

  3. 서로 다른 Linux 배포판 (예: 아마존 리눅스와 우분투) 간에 커널 버전이 다르더라도, 대부분의 경우 호환성을 유지하기 위해 Linux 커널 API는 안정적으로 유지됩니다. 그렇기 때문에 아마존 리눅스 호스트에서 우분투 기반 컨테이너를 실행할 수 있습니다. 다만, 아주 특정적인 시스템 호출이나 최신 커널 기능에 의존하는 경우에는 호스트 OS와 컨테이너 OS 간의 버전 차이가 문제가 될 수 있는 경우가 있습니다.

관련하여 더 자세한 설명은 “컨테이너에도 OS가 포함되는지 궁금합니다.” 질문을 참고해주세요. 이 답변에서 컨테이너의 이미지와 컨테이너 사용에 관련된 핵심적인 설명을 제공하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.