Docker란?
•
애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
Docker Container
•
Docker Image를 담아놓는 곳
•
호스트 OS상에 논리적인 구획
•
어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것
•
컨테이너는 훨씬 가볍고 운영체제 커널을 공유하며, 시작이 훨씬 빠르고 운영체제 전체 부팅보다 메모리를 훨씬 적게 차지한다.
컨테이너 기술 발전 과정
Traditional Deployment
•
하드웨어 위에 OS 설치 후 App 실행에 필요한 Library를 OS에 설치
•
다양한 서비스를 한 서버에서 운영해야 하는 문제가 발생 (비용 효율성)
•
서비스간 라이브러리 충돌이 발생함에 까라 서비스간 환경 격리가 요구됨
Virtualized Deployment
•
Hypervisor: VM(Virtual Machine)을 관리하는 역할을 함
•
Guest OS(VM)에 하드웨어 자원을 에뮬레이팅을 하다보니 성능 하락이 발생하며, 가상머신을 띄우기 위한 자원의 오버헤드가 발생
•
Cold Start
Container Deployment
•
Docker : 대표적인 Container Engine
•
chroot, namespace 등을 이용한 격리기술 제공
•
Host Process에서 실행되는 환경이기에 성능하락과 자원 오버헤드 문제에서 벗어남
•
Cold Start
Kubernetes Deployment
•
Kubernetes : 대표적인 Container Orchestration System
•
여러 서버에서 구성된 환경에서 Container를 어떻게 잘 운영할 수 있는지 목적으로 함
virtual Machine vs Docker Container
•
virtual Machine
◦
성능 손실 발생: 시스템 자원을 가상화하고 독립된 공강을 생성하는 작업(HyperVisor)을 거침
◦
배포가 느려짐: 실행 파일 이외에 Guest OS 등이 추가됨으로써 용량이 큼
•
Docker Container
◦
성능 손실 없음: 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 구축
◦
배포가 빠름: 실행 파일 및 라이브러리만 필요하여 용량이 적음
Docker Image & Container
•
도커 이미지와 컨테이너는 1:N 관계
•
1개의 이미지로 N개의 컨테이너를 만들 수 있다.
Docker Image
•
컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것
•
Image를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작
•
스택형태로 차곡차곡 쌓임
◦
ubuntu 이미지: Layer A,B,C
◦
nginx 이미지: unbuntu(Layer A,B,C) + nginx Layer
◦
web app 이미지: unbuntu(Layer A,B,C) + nginx Layer+ web app source Layer
Docker Hub & Docker Registry
•
Docker Hub : 이미지를 저장하고 관리
•
많은 회사들이 Docker로 소프트웨어를 배포하기 시작했고 공개이미지들을 공유 가능.
Docker Hub를 이용하면 손쉽게 image를 pull 받아 컨테이너에 적용 가능. (사실 GitHub와 동일하게 생각해도 무관함)
•
Docker Registry : Docker Hub처럼 공개된 방식이 아닌 비공개적으로 격리된 저장소를 구축
Docker Archtecture
•
Docker Client
◦
사용자 = 우리
◦
도커를 설치하면 그것이 Client며, build, pull, run 등의 도커 명령어를 수행
•
Docker Host
◦
도커가 띄워져있는 서버를 의미
◦
컨테이너와 이미지를 관리하게 된다.
•
Docker daemon
◦
도커 엔진
•
Registry
◦
외부(remote) 이미지 저장소