본문 바로가기
TIL

[TIL] Docker 특강 1차시 (1) :: 개념

by 쏘야.yap 2020. 10. 12.
728x90

Docker 개념

Docker는 크게 두 가지 용도로 활용할 수 있다.

OS Containers OS를 컨테이너로 운영 -> 런타임 기반의 컨테이너 운영
Application Containers  Application 을 컨테이너로 운영

 

Docker의 컨테이너들

OS Container의 경우 VM에 비해 속도가 빠르며 성능이 좋다.
왜냐면 도커의 기술 스택이 다 리눅스 커널 기술 스택이라서 라고 한다.


Docker의 컨테이너를 만들 때, 하나로 만드는 것이 아니라, 여러 이미지를 레이어해서 만든다.

이 이미지들은 read-only 이며, 최상단의 컨테이너만 write가 된다.

 

여러 이미지를 중첩하여 컨테이너를 만든다.


도커 아키텍쳐

클라이언트가 도커 데몬으로 컨테이너를 돌리는데, 만약 돌릴 이미지가 없다면, 외부의 레파지토리에서 이미지를 받아와서 돌린다.

취약점

1. 도커 배포 데몬이 죽으면 컨테이너가 다 죽는다.

2. 도커로 뭘 하려고 하면 root 권한이 있어야 한다.


MicroService

- 특정 리소스에 부하가 걸리면, 해당 리소스만 집중해서 확장 (scale out) 가능

 

Monoliths

- 상황에 따라 전체 시스템을 확장 (scale up)

ex) 서비스를 잠시 멈추고 메모리 등을 확장

 

OS 컨테이너는 MicroService에서 사용하게 된다.


Docker의 핵심 기술 3가지 : chroot, cgroup, namespace

 

1. chroot (Change Root Directory)

- 파일 시스템을 격리시키는데 사용한다.

출처: https://vo.la/LvBi4

2. cgroup

- 자원에 대한 제어를 가능하게 해주는 리눅스 커널의 기능

- 컨테이너에 리소스 핸들링을 가능하게 한다.

 

3. namespace

- chroot와 비슷하지만, 파일 시스템 격리를 우선으로 한 chroot와 달리 namespace는 6가지 기능을 지원함

출처: https://vo.la/7lSSQ

 

Docker는 리눅스 컨테이너와 기반은 같지만, 서비스 배포에 최적화되었다.

 

출처 : https://vo.la/SgHpL


 

Image vs Container

출처 : https://vo.la/BUgDt


Docker terminologies

 

- 파일시스템과 드라이버

 

- Container size

-- Virtual size : read-only size + writable size

-- size : writable size

 

- Copy-on-Write

-- data write: writable layer에 기록

 

결론: base image 변경을 지양하고, 변경사항을 volume을 통해서 관리

 

데이터를 찾을 때, 그 데이터가 이미지에 있는 데이터라면?

-> 이미지는 read-only 이므로 조작할 수 없다.

-> 최상위 레이어에 그 데이터를 가져와서 최상위 데이터에서 조작한다.

 


Docker Image 

- Dockerfile을 통해 정의한다.