본문 바로가기

대학생활

Docker란 무언인가.. (What is Docker??)

Docker(도커)란 무엇일까.. 왜 사람들이 Docker에 열광하고 알고 싶어할까..

 

 

Docker의 역사

마이크로서비스가 물리적으로 동작하던 옛날에는 서비스가 확장됨에 따라 유지보수의 문제, 서버구조 문제가 있었다.

"가상화 기술"은 그 마이크로서비스를 하나의 서버를 통해 구현할 수 있게 해주었고,

그 기술에는 2가지 갈래를 대표적으로 설명할 수 있는데 그 중 하나가 VM, 다른 하나가 Docker다.

 

- 참고로 VM은 Oracle Virtual Machine, VMware 같은 애들이다-

 

VM vs Docker

그렇다면 이 둘은 어떤 차이가 있을까

※ 빠른요약

Docker는..
"비용이 싸다"
"부팅이 빠르다"
"호환성이 좋다" - 컨테이너 간의
"보안이 준수하다"
"Docker is a lightweight VM" <= 근데 쓰는 건 VM 쪽이 훨씬 쉬운 거 같은 느낌..

 

※ 위 그림대로 설명하겠습니다.

VM의 구조
Infrastructure = 노트북 + 윈도우
Hypervisor = 나뉘어진 Guest OS들과 소통하는 친구, 소통시 overhead 발생.
Guest OS  ┓
Bin / Libs  ┃ㅡ> 우리가 사용하는 VM 서비스: VMware에서 Linux깔고 들어가면 있을 건 다 있는 이유.
Apps         ┛

Docker의 구조
Infrastructure = 노트북
Host OS = 윈도우
Docker = Host OS와 직접 소통하는 친구.. Host OS의 resource 사용 가능. 각 container 분리되도록 설정. 여기를 daemon(데몬)이라고 부르더라구요.. image를 실행하고 해당하는 bin / libs를 image에 빌드함.

+ Docker는 VM에 비해 lug(위 그림에서 솟은 부분들)가 작아서 용량확보(save)에 용이하다는 장점도 있다네요~
+ 그래서 가상화 OS가 필요없긴 한데, image에 가상화 OS를 빌드하고 싶다면 할 수는 있다네요~

 

 

Docker와 그 기술

Docker의 메인 컨셉은 컨테이너의 형태로 OS를 흉내내는 것이다. (It emulates OS, while VM emulates Hardware)

 

Docker는 다음과 같은 2가지의 Kernel 기술을 활용한다.

Cgroup

Kernel의 기능 중 하나로, system 상의 자원(CPU, Memory, Nework ~~)을 제한하고 격리할 수 있음

 

Namespace

해당 프로세스만의 자원을 볼 수 있도록 하는 기능 - 타 프로세스와는 격리됨

 

UTS: 컨테이너 마다 다른 host 할당 가능

IPC: 프로세스간의 통신의 형태가 제한(격리)됨

PID: 프로세스끼리 서로 격리됨 - 누가 누구 자식인지 어디 컨테이너인지(PID list가 격리됨)

MNT: 파일 시스템의 mount point가 분리됨 - 컨테이너끼리 서로 다른 파일 시스템을 쓰는구나~

NET: 네트워크도 격리

USER: 컨테이너 내외부로 user, group이 분할됨

 

※ 쉽게 말해서 웬만한 resource는 싹 다 분리된다~

 

 

그렇다면.. Docker.. 이대로 장점만 있을 것인가

먼저 각 인스턴스 간의 isolation에 관한 이슈가 있다.

 

VM의 경우

Full virtualization
Don't affect each other
즉, Guest OS가 흉내낸 Hardware 단계에서 격리되어 있기 때문에 보안과 자원 분리에 있어 엄청 뛰어나다.

 

Docker의 경우

Containers are not fully isolated
즉, VM에 비하면 보안 상의 이슈에 대해서 완전히 자유롭기는 어렵다.

 

이외에도,

Docker는..
"미리 필요한 자원을 컨테이너에 실어야 한다"
"다른 회사에서 배포한 오픈소스 간에는 컨테이너끼리 호환이 안 될 수도 있다"
"컨테이너가 닫힘과 동시에 데이터는 날아간다" <= 데이터를 보관할 방법이 따로 마련되어야 한다.
"고사양 앱(그래픽 관련)은 컨테이너 위에서 잘 안 돌아간다"

와 같은 문제점이 남아 있다..

 

 

Docker Orchestration

단일 Host 체제에서는 가볍고 싸다는 Docker의 장점마저 못 살릴 수도 있다.

만약에 Docker 위에서 구동되는 서비스의 사용량이 급격하게 증가한다면 그 사용량을 수용할 서버가 필요할 것이다.

하지만 Scale Up으로 급한 불을 껐는데, 그것이 DDoS와 같은 일시적인 현상이었다면 다시 Host의 성능을 낮추는 수고를 해야할 것이다. (Scale Up 안하고 뻐기면 Host 죽어버린대요,, ㅠㅠ)

 

이렇게 변화하는 상황에 유연한 대처가 가능토록 하는 서비스가 Docker Orchestration이다.

그리고 대표적인 서비스로 Kubernetes(쿠버네티스)가 있다.. 업계 표준이라네요..

 

 

Kubernetes를 사용할 줄 알면 정말 좋다고 하니.. 모두 실습해보는 것이 어떨까요 ㅠㅠ

 

 

번외

Pyvenv와 Docker의 차이는 무엇일까.. 둘이 ㄹㅇ.. 컨셉이랑 동작이 비슷한데..

 

그들의 차이는 Docker와 VM의 차이처럼 가상화(모방)하는 대상(범위)에 있다.

VM - Hardware

Docker - OS

Pyvenv - Python Interpreter, Python Libs, Python ~~~

 

 

참고 자료

https://circleci.com/blog/virtual-machines-vs-docker-containers-a-comparison/?utm_source=google&utm_medium=sem&utm_campaign=sem-google-dg%E2%80%94japac-en-dsa-maxConv-auth-nb&utm_term=g_-_c__dsa_&utm_content=&gclid=Cj0KCQjwyt-ZBhCNARIsAKH1175S5nfsBxf2tj-3CV46kv5NtAGGCAuDsRTolYL3bgbdZOzfunwn-MMaAidyEALw_wcB 

 

Virtual Machines vs Docker Containers: a Comparison

This is a guest post written by Nick Janetakis. It originally appeared on his blog, and has been published here with his permission. Nick is a self-taught full-stack developer and teacher, and has created a course for Docker beginners called Dive into Dock

circleci.com

https://www.aquasec.com/cloud-native-academy/docker-container/docker-containers-vs-virtual-machines/

 

Docker Containers vs. Virtual Machines - Aqua

Docker provides many capabilities of Virtual Machines, with added advantages. Learn how they compare.

www.aquasec.com

https://stackoverflow.com/questions/50974960/whats-the-difference-between-docker-and-python-virtualenv

 

 

What's the difference between Docker and Python virtualenv?

From what I understand about Docker, it's a tool used for virtual environments. In their lingo, its called "containerization". This is more or less what Python's virtualenv does. However, you can use

stackoverflow.com

http://www.yes24.com/Product/Goods/91618364

 

알면 더 쉬운 도커 쿠버네티스 - YES24

클라우드 세상에서 개발자가 꼭 알아야 하는 도커, 쿠버네티스도커와 쿠버네티스는 서버를 유연하게 관리할 수 있는 매력적인 도구이다. 어려운 서버 이전 작업이 이제는 클릭 한 번으로 가능

www.yes24.com