본문 바로가기

setting

Docker 도커란?

(가장 빨리 만나는 Docker-이재홍)


클라우드 환경에서 1대가 되었든, 1000대가 되었든 몇 번의 클릭 만으로 가상 서버를 만들 수 있는 상황에서


하나 하나 씩 일일히 각종 소프트웨어 설치 및 설정, 배포 등이 힘듬으로 나온 개념


Immutable Infrastructure

호스트 OS와 서비스 운영 환경(서버 프로그램, 소스 코드, 컴파일된 바이너리)을 분리하고,  

한 번 설정한 운영 환경은 변하지 않는다(Immutable)는 개념


즉, 서비스 운영 환경을 이미지로 생성한 뒤 서버에 배포하여 실행


만약, 서비스가 업데이트되면 운영 환경 자체를 변경하지 않고,

이미지를 새로 생성하여 배포하는 식!




몇 가지 장점 있음

1. 서비스 운영 환경을 이미지로 생성했기 때문에 이미지 자체만 관리하면 됨

2. 확장 쉬움 (아마존의 auto scaling과 잘 어울림)

3. 테스트 환경 마련 굳 (이미지만 실행 하면 되니까)

4. 운영체제와 서비스 운영 환경이 분리되어 가볍고 언제든 실행 가능함



가상 머신과 비슷한 개념인데

가상 머신은 리얼 머신에 비해 속도 느린 단점 있음..

가상 머신은 완전한 컴퓨터나 다름 없어서 게스트OS를 항상 설치해야되고..

이렇게 되면 이미지 용량이 커짐 (개선 위해 반가상화 방식이 나오긴 함)


도커는 반가상화보다 경량화된 방식

OS가 필요 없고, OS자원(시스템콜)은 호스트와 공유함 (이미지 용량 작아)

하드웨어 가상화하는 계층 없음 (메모리 접근, 파일시스템, 네트워크 속도 빠름)


virtual machine (http://www.docker.com/what-docker)



docker container (http://www.docker.com/what-docker)



그 외에도 리눅스 자체에 원래 컨테이너라는 개념이 있었다고 함 (p.18)



리눅스는 LinuX Container(LXC)라고

시스템 레벨의 가상화를 제공함(격리 공간 제공)

LXC가 제공하는 가상 공간은 OS가 설치 되지 않기 때문에 가상 머신이라 하지않고, '컨테이너'라고 부름!


LXC는 아래의 두 기능을 활용해 가상 공간을 제공한다고 한다!


Control Groups(cgroups): CPU, 메모리, 디스크, 네트워크 자원을 할당해서 완전한 형태의 가상공간 제공

또한, 프로세스 트리, 사용자 계정, 파일 시스템, IPZC 등을 격리시켜 호스트와 별개의 공간을 만드는데, 

이것을 Namespace isolation(namespaces)라고 함


그리고, LXC는 격리 공간만 제공할 뿐, 개발 및 서버 운영에 필요한 부가 기능이 부족해서 


Docker는 리눅스 커널의 cgroups, namespaces를 기반으로 

이미지, 컨테이너 생성 및 관리 기능과 다양한 부가 기능을 제공한다고함!


처음 개발 당시엔 LXC 기반으로 구현, 이후에는 libcontainer를 개발하여 사용.

[출처] Docker?|작성자 송제인