Docker란?
팁
이 콘텐츠는 .NET Docs 또는 오프라인으로 읽을 수 있는 다운로드 가능한 무료 PDF로 제공되는 컨테이너화된 .NET 애플리케이션용 .NET 마이크로 서비스 아키텍처인 eBook에서 발췌한 내용입니다.
PDF 다운로드
Docker 클라우드 또는 온-프레미스에서 실행할 수 있는 이식 가능한 자급자족 컨테이너로 애플리케이션 배포를 자동화하기 위한 오픈 소스 프로젝트. 또한 Docker는 Microsoft를 포함한 클라우드, Linux 및 Windows 공급업체와 협력하여 이 기술을 홍보하고 발전시키는 회사.
Docker 컨테이너를 실행할 수 있는 위치를 보여 주는
그림 2-2. Docker는 하이브리드 클라우드의 모든 계층에 컨테이너를 배포합니다.
Docker 컨테이너는 고객 데이터 센터의 온-프레미스, 외부 서비스 공급자 또는 클라우드, Azure의 어디에서나 실행할 수 있습니다. Docker 이미지 컨테이너는 Linux 및 Windows에서 기본적으로 실행할 수 있습니다. 그러나 Windows 이미지는 Windows 호스트에서만 실행할 수 있으며 Linux 이미지는 Linux 호스트 및 Windows 호스트(지금까지 Hyper-V Linux VM 사용)에서 실행할 수 있습니다. 여기서 호스트는 서버 또는 VM을 의미합니다.
개발자는 Windows, Linux 또는 macOS에서 개발 환경을 사용할 수 있습니다. 개발 컴퓨터에서 개발자는 앱 및 해당 종속성을 포함하여 Docker 이미지가 배포되는 Docker 호스트를 실행합니다. Linux 또는 macOS에서 작업하는 개발자는 Linux 기반 Docker 호스트를 사용하며 Linux 컨테이너에 대해서만 이미지를 만들 수 있습니다. (macOS에서 작업하는 개발자는 macOS에서 코드를 편집하거나 Docker CLI를 실행할 수 있지만 이 작성 시점부터 컨테이너는 macOS에서 직접 실행되지 않습니다.) Windows에서 작업하는 개발자는 Linux 또는 Windows 컨테이너에 대한 이미지를 만들 수 있습니다.
개발 환경에서 컨테이너를 호스트하고 추가 개발자 도구를 제공하기 위해 Docker는 Windows 또는 macOSDocker Desktop을 제공합니다. 이러한 제품은 컨테이너를 호스트하는 데 필요한 VM(Docker 호스트)을 설치합니다.
Windows 컨테이너 실행하려면 다음 두 가지 유형의 런타임이 있습니다.
Windows Server 컨테이너는 프로세스 및 네임스페이스 격리 기술을 통해 애플리케이션 격리를 제공합니다. Windows Server 컨테이너는 컨테이너 호스트 및 호스트에서 실행되는 모든 컨테이너와 커널을 공유합니다.
Hyper-V 컨테이너는 고도로 최적화된 가상 머신에서 각 컨테이너를 실행하여 Windows Server 컨테이너에서 제공하는 격리를 확장합니다. 이 구성에서 컨테이너 호스트의 커널은 Hyper-V 컨테이너와 공유되지 않으므로 격리가 향상됩니다.
이러한 컨테이너에 대한 이미지는 동일한 방식으로 만들어지고 동일하게 작동합니다. 차이점은 이미지를 사용하여 컨테이너를 만들 때, Hyper-V 컨테이너를 실행하는 데 추가 매개 변수가 필요하다는 점입니다. 자세한 내용은 Hyper-V 컨테이너참조하세요.
Docker 컨테이너와 가상 머신 비교
그림 2-3에서는 VM과 Docker 컨테이너 간의 비교를 보여 줍니다.
Virtual Machines | Docker 컨테이너 |
---|---|
기존 VM의 하드웨어/소프트웨어 스택을 보여 주는 ![]() |
Docker 컨테이너의 하드웨어/소프트웨어 스택을 보여 주는 ![]() |
가상 머신에는 애플리케이션, 필수 라이브러리 또는 이진 파일 및 전체 게스트 운영 체제가 포함됩니다. 전체 가상화에는 컨테이너화보다 더 많은 리소스가 필요합니다. | 컨테이너에는 애플리케이션 및 모든 종속성이 포함됩니다. 그러나 OS 커널을 다른 컨테이너와 공유하며 호스트 운영 체제의 사용자 공간에서 격리된 프로세스로 실행됩니다. (각 컨테이너가 컨테이너당 특수한 가상 머신 내에서 실행되는 Hyper-V 컨테이너를 제외하고) |
그림 2-3. 기존 가상 머신과 Docker 컨테이너 비교
VM의 경우 호스트 서버에는 인프라, 호스트 운영 체제 및 하이퍼바이저의 세 가지 기본 계층이 있으며, 각 VM에는 자체 OS와 필요한 모든 라이브러리가 있습니다. Docker의 경우 호스트 서버에는 인프라와 OS만 있으며, 컨테이너 엔진은 컨테이너를 격리된 상태이지만 기본 OS 서비스를 공유합니다.
컨테이너에는 훨씬 적은 리소스가 필요하기 때문에(예: 전체 OS가 필요하지 않음) 배포하기 쉽고 빠르게 시작합니다. 이렇게 하면 밀도가 높아질 수 있으므로 동일한 하드웨어 단위에서 더 많은 서비스를 실행하여 비용을 절감할 수 있습니다.
동일한 커널에서 실행하면 VM보다 격리가 줄어듭니다.
이미지의 주요 목표는 다양한 배포에서 환경(종속성)을 동일하게 만드는 것입니다. 즉, 컴퓨터에서 디버그한 다음 동일한 환경이 보장된 다른 컴퓨터에 배포할 수 있습니다.
컨테이너 이미지는 앱 또는 서비스를 패키지하고 안정적이고 재현 가능한 방식으로 배포하는 방법입니다. Docker는 기술뿐만 아니라 철학과 프로세스라고 말할 수 있습니다.
Docker를 사용할 때 개발자가 "내 컴퓨터에서 작동합니다. 프로덕션에서는 작동하지 않나요?" 라고 말하는 것을 듣지 못합니다. 패키지된 Docker 애플리케이션은 지원되는 모든 Docker 환경에서 실행될 수 있고 모든 배포 대상(예: Dev, QA, 스테이징 및 프로덕션)에서 의도한 방식으로 실행되기 때문에 "Docker에서 실행됩니다"라고 간단히 말할 수 있습니다.
간단한 비유
아마도 간단한 비유는 Docker의 핵심 개념을 파악하는 데 도움이 될 수 있습니다.
잠시 1950년대로 거슬러 올라가보겠습니다. 워드 프로세서가 없었고 복사기가 사방에 사용되었습니다(일종의).
필요에 따라 편지들을 신속하게 일괄 발송하고, 실제 종이와 봉투를 사용하여 편지를 고객에게 우편으로 보내 각 고객의 주소로 실제 우편물을 배달해야 한다고 상상해 보십시오(당시에는 이메일이 없었습니다).
어느 시점에서 당신은 편지가 단지 목적에 따라 필요에 맞게 선택되고 배열된 큰 단락 모음이라는 것을 깨닫게 되므로, 상당한 급여 인상을 기대하며 신속하게 편지를 발행할 수 있는 시스템을 고안합니다.
시스템은 간단합니다.
각 단락을 포함하는 투명한 시트 데크로 시작합니다.
편지를 발행하려면 필요한 단락이 포함된 시트를 선택한 다음, 잘 보이고 읽기 좋도록 정렬하여 배치합니다.
마지막으로, 복사기에 집합을 배치하고 시작을 눌러 필요한 만큼 문자를 생성합니다.
따라서 간소화하는 것이 Docker의 핵심 아이디어입니다.
Docker에서 각 계층은 프로그램 설치와 같은 명령을 실행한 후 파일 시스템에 발생하는 변경 내용의 결과 집합입니다.
따라서 계층이 복사된 후 파일 시스템을 "확인"하면 프로그램이 설치되었을 때 계층에 포함된 모든 파일이 표시됩니다.
이미지를 운영 체제가 이미 설치된 "컴퓨터"에 설치할 준비가 된 보조 읽기 전용 하드 디스크라고 생각할 수 있습니다.
마찬가지로 컨테이너를 이미지 하드 디스크가 설치된 "컴퓨터"로 간주할 수 있습니다. 컴퓨터와 마찬가지로 컨테이너는 전원을 켜거나 끌 수 있습니다.
.NET