0. 가상화 머신
- OS 전체 가상화
- 호스트 OS 위에 게스트 OS 전체를 가상화
- 여러가지 OS 를 운영할 수 있지만 이미지 안에 OS 가 포함되어 용량이 크고 속도가 느리다
- ex) VMware, VirtualBox
- OS 반 가상화
- OS 전체 가상화보다는 성능이 향상되었지만 추가적인 OS 설치는 여전히 필요
- ex) AWS 같은 클라우드 서비스 기술에 사용됨
- 프로세스 격리 방식
- Linux 커널 레벨에서 제공하는 격리된 가상 공간을 사용한다
- 게스트는 OS 를 설치하지 않기 때문에 호스트와 속도 차이가 거의 없다
- Linux container : Linux에서 프로세스를 격리하고 CPU, 메모리는 필요한 만큼만 추가로 사용하여 성능 손실 거의 없음
- 여러개의 컨테이너를 독립적으로 실행 및 여러개의 프로세스를 백그라운드로 실행 가능
1. Docker
- 2013년에 출시한 Linux container 기반의 가상화 플랫폼으로 오픈소스 Docker Engine 으로 시작되었다
- libcontainer 를 개발했으며 2015년 runc 활용
- DevOps (개발자와 운영자) 을 위하여 어플리케이션 종속성을 인프라와 분리했다
- Host 와 OS 자원을 공유하여 이미지 용량이 크게 줄었다
- Git 과 같이 이미지 버전 관리도 제공하고 배포 및 공유가 가능하다
- 주요한 개념으로는 Container 와 Container Image 가 있다
2. Container
- 앱 레이어에서의 코드와 모든 종속성을 함께 패키징한 표준 소프트웨어 단위로 read-write 이다
- 여러 컨테이너가 동일한 머신에서 실행될 수 있고 OS 커널을 다른 컨테이너와 공유할 수 있으며, 각 컨테이너는 사용자의 공간에서 격리된 프로세스로 실행된다
- 컨테이너는 VM 보다 공간을 덜 차지하며 더 많은 응용프로그램을 처리할 수 있으며 더 적은 VM 과 운영체제가 필요하다
3. Image
- 응용 프로그램을 실행하는데 필요한 모든 것(코드, 런타임, 시스템 도구 및 라이브러리, 설정 등) 을 포함하는 경량의 독립형 소프트웨어 패키지로 read-only 이다
- 런타임 시 이미지는 Container 가 되며 변경되는 값은 컨테이너에 저장된다
- Image 를 여러번 실행하면 같은 이미지로 여러개의 컨테이너를 생성할 수 있으며,
컨테이너의 상태가 바뀌어도 해당 이미지는 변하지 않는다 (그래서 이미지는 상태를 가질 수 없다) - Container 를 재사용 하려면 docker commit 을 통해 이미지로 만들 수 있다
- Image 에는 컨테이너를 실행하기 위한 모든 정보를 담고있기 때문에 추가적인 설치가 필요없으며,
해당 이미지를 repository 에 올리고 Docker 를 사용할 수 있는 환경에서 이미지를 받아서 실행시킨 뒤 사용할 수 있다
4. Docker Hub
- 컨테이너 커뮤니티 개발자, 오픈 소스 프로젝트, ISV(Independent Software Vendor) 등이 컨테이너에 코드를 작성하여 배포하는 등 다양한 콘텐츠 소스가 포함된 Container image 저장소이다
- 유지보수가 필요없는 바로 사용을 원할 경우 docker hub 에서 다운받아 사용하면 된다
- Ubuntu, CentOS 등 리눅스 OS 이미지와 MySQL, Redis, Wordpress 의 공식 이미지를 제공하고 있다
이미지 이름은 "네임스페이스/이미지네임" 로 구성되는데, 공식 이미지는 네임스페이스와 슬래시(/) 가 없다
# 참고
- Docker : Why Docker?
- Docker: Docker Hub
- 초보를 위한 도커 안내서
- Docer 관련 모음 : https://github.com/remotty/documents.docker.co.kr
'기타개발' 카테고리의 다른 글
Coroutines - Channels (0) | 2020.07.30 |
---|---|
RxJava - What's different in 3.0 (0) | 2020.06.23 |
댓글