Docker 개념
Docker는 크게 두 가지 용도로 활용할 수 있다.
OS Containers | OS를 컨테이너로 운영 -> 런타임 기반의 컨테이너 운영 |
Application Containers | Application 을 컨테이너로 운영 |
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)
- 파일 시스템을 격리시키는데 사용한다.
2. cgroup
- 자원에 대한 제어를 가능하게 해주는 리눅스 커널의 기능
- 컨테이너에 리소스 핸들링을 가능하게 한다.
3. namespace
- chroot와 비슷하지만, 파일 시스템 격리를 우선으로 한 chroot와 달리 namespace는 6가지 기능을 지원함
Docker는 리눅스 컨테이너와 기반은 같지만, 서비스 배포에 최적화되었다.
Image vs Container
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을 통해 정의한다.
'TIL' 카테고리의 다른 글
[TIL] 시간 복잡도와 알고리즘 문제 풀기 (0) | 2020.10.28 |
---|---|
[TIL] Hibernate PK 생성 전략 (2) | 2020.10.15 |
[TIL] SOMA CAMP 1일차 - 최백준 알고리즘 (0) | 2020.10.14 |
[TIL] Spring boot - MySQL 연동 삽질 (0) | 2020.10.13 |