Container Registry
Docker 컨테이너를 어딘가에 저장하고, 해당 컨테이너를 업데이트하고 해당 컨테이너를 서버로 가져와서 Docker 같은 걸 이용해서 서비스에 투입 -> 이와 같이 컨테이너를 저장하는 저장소 Reposity가 바로 Container Registry
NCP에서는 사용자들이 별도의 Container Registry를 만들지 않고 NCP안에있는 Container Registry이용해서 보다 편리하게 이용할 수 있도록 Object Storage 기반의 Container Registry를 제공
- 컨테이너 이미지를 쉽게 저장하고 관리할 수 있는 컨테이너 레지스트리 관리 서비스
- Public/Private Endpoint 제공을 통해 나만의 컨테이너 레지스트리를 구성
- Public/Private 두가지 방식으로 접근이 가능 (외부에서도 NCP안에서도 해당 Container Registry에 접근이 가능, Container Registry의 Update 혹은 Get, Put 여러가지 Operation을 통해서 여러분의 서비스에 Container 적용 가능)
- 도커 레지스트리 HTTP API V2 지원
- 저장소로 Object Storage를 이용
- 컨테이너 관리가 용이
- 컨테이너 취약점 분석 가능
- 일반적으로 Volume storage에다가 저장하게 되면 해당 서버에 문제가 생겼을때 복구 불가 문제도 생김, 관리 용이하지도 않음
Docker의 활용 - Dockerfile
- Docker file을 만들어서 build
- 그러면 해당 Container(이미지)가 만들어짐
- 그 후 수정하거나 업데이트 가능
- 해당 Container를 통해서 Run을 통해 실제 서비스에 투입 가능
일반 VM과 컨테이너의 차이
- Virtualization은 단일 시스템에서 여러 OS가 동시에 실행
- Container는 동일한 OS 커널을 공유하며 시스템의 나머지 부분으로 프로세스를 격리
- Container는 App에 들어가는 OS, VM 위에 하나의 App이 또다른 VM처럼 동작을 하게 되는 것
- 기존 가상화 기반으로 많이 사용되는 OS 전체 가상화 방식이 아닌, 하나의 OS 커널 위에 각각의 개별 프로세스와 그에 따른 환경을 격리화 시키는 방식이다. OS 가상화 보다 오버헤드가 적고, 성능 손실이 적음.
Docker 특징 - Layered Image
- Docker는 Union Filesystem이라는 기술을 이용해 여러 Layer를 하나의 파일 시스템으로 인식될 수 있도록 한다.
- 만약, 이미지에 수정 사항이 생기면, Layer를 추가하여 변경 분만 기록하고 최상단에는 항상 R/W layer가 존재
- 공통 부분은 Container들이 공유해 사용함으로써 효율적인 이미지 관리가 가능하다.
- 기존의 Ubuntu, Apache 같은 것들이 있다면 Ubuntu 위에 Apache올리고 그위에 Web application을 올리는 OS와 Library에 대한 종속성없이 마치 JavaVM이 동작하듯이 Container만 올리게 되면 해당 Container는 어디서 만들었던 간에 기반이 되는 OS와 상관없이 원하는 결과를 얻을 수 있다.
Docker 특징 - Docker Hub / Docker Registry
- 사용자에 의해 생성된 이미지는 Docker Registry라는 이미지 저장 공간에 업로드 할 수 있고, 다른 사용자의 이미지를 공유하여 사용 가능하다.
- Docker Hub : 일반적으로 CentOS 나 Ubuntu와 같은 이미지
- Private Registry : 나만의 Container 이미지 (NCP Container Registry, ACR, ECR ...)