해결된 질문
작성
·
97
1
이 강의로 도커에 처음 입문하게 되었습니다. 강의를 듣던 중 도커가 이런 식으로 작동하는 것이구나에 대해 이해해 가고 있던 와중 섹션 2 이미지 강의에서 보여주신 수업자료 화면에서 궁금한 점이 생겨 질문드립니다.
아직 제가 강의로만 도커를 입문해서 경험이 없어서 그런데 하이퍼바이저 가상화에서는 하이퍼바이저가 서로 다른 os (호스트 os 와 게스트 os) 를 조율해서 자원을 사용할 수 있도록 한다고 하셨는데
컨테이너 기술의 경우 무조건 호스트 os 와 같은 os 를 가진 이미지 만을 사용해야 하는 것인가요?
필요에 의해 다른 os를 가진 이미지를 사용하는 일은 없는 것인지 만약 있다면 서로 다른 os 간의 조율은 어떻게 되는 것인지 궁금합니다
답변 2
0
zzing199842님 안녕하세요. 데브위키입니다.
네 맞습니다. 같은 OS, 정확하게는 같은 종류의 CPU 아키텍처의 컨테이너만 사용할 수 있습니다.
그래서 리눅스에서 만든 이미지는 리눅스에서만 사용 가능합니다.
기술적으로는 제약이 있지만 도커는 이런 문제를 해결하기 위해 BuildKit이라는 도구를 제공합니니다.
이미지를 만들 때 실행 가능한 CPU 아키텍처를 명시하면 다양한 OS에서 실행할 수 있는 이미지를 만들 수 있습니다. 정확히는 하나의 이미지에 여러 버전을 만드는 것입니다. 😀
아래 명령어는 BuildKit으로 여러 환경에서 실행할 수 있는 이미지를 만들 수 있습니다. --platform에는 이미지를 실행할 CPU아키텍처(OS) 종류를 명시합니다.
# 여러 환경에서 실행할 수 있는 이미지 빌드
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t username/demo:latest .
그래서 이미지가 저장되어있는 도커 허브에서 이미지를 조회하면 이렇게 실행할 수 있는 CPU아키텍처의 종류를 확인하실 수 있습니다!
linux/386, linux/amd64, linux/arm/v5 이 부분이 실행 가능한 CPU 아키텍처입니다.
강의 들으시면서 더 궁금하신 부분이 있으면 편하게 질문해주세요!
0
안녕하세요, 인프런 AI 인턴입니다.
컨테이너 기술, 특히 도커는 컨테이너와 호스트 OS 사이에서 다양한 애플리케이션을 격리해서 실행할 수 있게 해주는 기술입니다. 컨테이너는 호스트 OS의 커널을 공유하지만, 애플리케이션 실행에 필요한 라이브러리와 종속성은 컨테이너 내부에 포함되어 있어서, 다른 컨테이너든 호스트 OS든 영향을 받지 않고 독립적으로 실행될 수 있습니다.
컨테이너화된 애플리케이션이 호스트 OS와 같은 OS 이미지를 사용해야 한다는 것은 아니지만, 모든 컨테이너는 호스트 OS의 커널을 공유해야 합니다. 따라서 호스트 OS와 완전히 다른 OS의 시스템 콜을 필요로 하는 애플리케이션의 경우, 동일한 OS 커널을 사용하지 않는 이상 컨테이너에서 직접적으로 실행하기는 어렵습니다.
예를 들어, 리눅스 컨테이너를 윈도우에서 실행하고 싶다면, 리눅스와 윈도우 간의 커널 차이를 극복할 방법이 필요합니다. 이러한 경우, 윈도우에서는 WSL(Windows Subsystem for Linux)을 사용하여 리눅스 커널을 호스트 OS 위에서 실행할 수 있고 그 위에서 컨테이너를 실행할 수 있습니다. 이렇게 컨테이너 기술은 호스트 OS의 커널을 공유함으로써 가볍고 효율적인 애플리케이션 격리와 배포를 가능하게 합니다.
다른 OS 간의 조율에 대해서는, 컨테이너 기술 자체보다는 호스트 시스템이나 가상화 레이어에서 제공하는 기능을 활용하는 경우가 일반적입니다. 컨테이너 기술은 애플리케이션 레벨에서 격리를 제공하며, OS 레벨의 완전한 가상화는 컨테이너 기술의 목적과는 다소 차이가 있습니다.
도커와 컨테이너 기술에 대해 더 깊게 이해하고 싶으시다면, 도커 공식 문서나 관련 학습 자료를 참고하시는 것도 좋을 것입니다.