5장. 컨테이너로 작업하기
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
이전 장에서는 Docker 이미지를 빌드하는 방법과 컨테이너 내에서 결과 이미지를 실행하는 데 필요한 아주 기본적인 단계를 배웠습니다. 이 장에서는 먼저 컨테이너 기술의 역사를 살펴본 다음 컨테이너를 실행하고 컨테이너가 받는 전체 구성, 리소스 및 권한을 제어하는 Docker 명령어를 자세히 살펴보겠습니다.
컨테이너란 무엇인가요?
가상화 시스템은 일반적으로 하이퍼바이저라고 알려진 가상화된 계층 위에서 완전한 Linux 커널과 운영 체제를 실행할 수 있게 해주는 VMware 또는 KVM과 같은 시스템에 익숙하실 것입니다. 이 접근 방식은 하드웨어 가상화 계층 위에 있는 별도의 메모리 공간에 각 VM이 자체 운영 체제 커널을 호스팅하므로 워크로드 간에 매우 강력한 격리를 제공합니다.
컨테이너는 모두 단일 커널을 공유하고 워크로드 간 격리가 전적으로 하나의 커널 내에서 구현되기 때문에 근본적으로 다릅니다. 이를 운영 체제 가상화라고 합니다.
libcontainer README에서 컨테이너에 대한 간략한 정의를 확인할 수 있습니다:
컨테이너는 호스트 시스템의 커널을 공유하며 시스템의 다른 컨테이너와 (선택적으로) 격리된 독립적인 실행 환경입니다.
컨테이너의 주요 장점 중 하나는 격리된 워크로드마다 전체 운영 체제 인스턴스가 필요하지 않으므로 리소스 효율성이 높다는 점입니다. 커널을 공유하기 때문에 격리된 작업과 그 아래에 있는 실제 하드웨어 사이의 간접 계층이 하나 더 줄어듭니다. 컨테이너 내부에서 프로세스가 실행 중일 때 컨테이너를 관리하는 커널 내부에는 약간의 코드만 존재합니다. 이를 두 번째 계층이 실행되는 가상 머신과 대조해 보세요. VM에서는 프로세스가 하드웨어 또는 하이퍼바이저를 호출할 때 프로세서의 권한 모드를 두 번 왔다 갔다 해야 하므로 많은 호출이 눈에 띄게 느려집니다.
참고
libcontainer는 애플리케이션에서 Linux 컨테이너를 관리하기 위한 표준 인터페이스를 제공하도록 설계된 Go 라이브러리 입니다.
그러나 컨테이너 접근 방식은 기본 커널과 호환되는 프로세스만 실행할 수 있다는 것을 의미합니다. 예를 들어, VMware 또는 KVM과 같은 기술에서 제공하는 하드웨어 가상화와 달리 Windows 애플리케이션은 Linux 호스트의 Linux 컨테이너 내부에서 기본적으로 실행할 수 없습니다. 그러나 Windows 애플리케이션은 Windows 호스트의 Windows 컨테이너 내부에서 실행할 수 있습니다. 따라서 컨테이너는 컨테이너 서버의 커널과 호환되는 애플리케이션이나 데몬을 실행할 수 있는 OS별 기술로 생각하는 것이 가장 좋습니다. 컨테이너를 생각할 때는 VM에 대해 이미 알고 있는 것을 버리고 컨테이너를 서버에서 실행되는 일반 프로세스를 감싸는 래퍼로 개념화해야 합니다.
참고
VM 내부에서 컨테이너를 실행할 수 있을 뿐만 아니라 컨테이너 내부에서 VM을 ...