호스트 OS 상에 컨테이너를 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것.
하드웨어 상에 베이스가 되는 호스트 OS를 설치하고, 호스트 OS에 가상화 소프트웨어를 설치한 후, 가상화 소프트웨어 위에서 게스트 OS를 작동시키는 것.
컨테이너와는 다르게 호스트 OS 상에서 다른 게스트 OS를 움직이고 있기 때문에 오버헤드가 크다.
오버헤드: 가상화를 수행하기 위해 필요한 CPU 자원, 디스크 용량, 메모리 사용량
간편하지만 사양이 낮은 경우 컴퓨터가 느려진다.
ex. Oracle VM VirtualBox, VMware Workstation Player
하드웨어 상에 가상화를 전문으로 수행하는 소프트웨어 '하이퍼바이저'를 배치하고, 하드웨어와 가상환경 제어.
호스트 OS 없이 하드웨어를 직접 제어하기 때문에 자원을 효율적으로 사용.
가상환경마다 별도의 OS가 작동하므로 가상 환경의 시작에 걸리는 오버헤드가 커진다.
ex. Hyper-V, XenServer
컨테이너 기술은 애플리케이션의 실행 환경을 모음으로써 이식성을 높이고 확장성이 좋은 환경에서 작동하는 것을 지향.
가상화 기술은 서로 다른 환경을 어떻게 효율적으로 에뮬레이션할지.
※ 이식성(portability): 한 번 만들면 어디서든지 실행되는 소프트웨어의 특성
애플리케이션의 실행에 필요한 환경을 하나의 이미지로 모아두고, 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용하기 위한 오픈소스 플랫폼.
내부에서 컨테이너 기술 사용.
애플리케이션의 실행에 필요한 프로글매 본체, 라이브러리, 미들웨어, OS나 네트워크 설정 등을 하나로 모아 Docker 이미지를 만든다.
하나의 이미지에 하나의 애플리케이션만 넣고 여러 개의 컨테이너를 조합하여 서비스를 구축하는 것을 권장.
Dockerfile을 바탕으로 자동으로 이미지 생성 가능.
Docker 레지스트리(Docker Hub)에서 공유할 수 있다.
컨테이너 단위로 서버 기능 작동시킴.
다른 가상화기술은 OS의 실행부터 시작하기 때문에 시간이 오래 걸리지만, Docker는 이미 움직이고 있는 OS 상에서 프로세스를 실행시키는 것과 비슷한 속도로 빠르게 실행시킬 수 있다.
Docker 핵심 기능. 이미지 생성, 컨테이너 가동. 명령 실행, Dockerfile에 의한 이미지 생성.
이미지 공개 및 공유.
컨테이너 일원 관리. 여러 개의 컨테이너 구성 정보를 코드로 정의하고, 명령 실행.
Docker 실행 환경 구축. 클라우드 환경에 Docker의 실행환경을 명령으로 자동 생성하기 위한 툴.
클러스터 관리. 여러 Docker 호스트를 클러스터화하기 위한 툴. Kubernetes 이용 가능.
PID/네트워크 등에 대한 격리를 위해 별도의 공간을 구성해주는 기술
계층 구조를 사용하여 프로세스 단위의 리소스 관리를 도와주는 기술
외부에서 컨테이너로 접근이 가능하도록 컨테이너의 가상 인터페이스와 호스트의 물리 인터페이스의 연결 구성
프라이빗 IP 주소로 인터넷에 액세스할 때 NAT 라우터가 프라이빗 IP 주소를 글로벌 IP 주소로 교환하여 송신함. 주소를 1:1로 변환하기 때문에 동시에 여러 클라이언트가 액세스 할 수 없다.
프라이빗 IP 주소와 함께 포트 번호도 변환. 하나의 글로벌 IP 주소로 여러 개의 프라이빗 IP 주소를 변환할 수 있다.
이미지 파일에 저장하는 데이터 및 동작 시 데이터 처리용(계층적 구성) -> ext같은 범용적 파일시스템이 아님
도서 - 완벽한 IT 인프라 구축을 위한 Docker