1. container 기술의 흐름 및 변화
과거의 컨테이너 기술
FreeBSD = open source unix의 freeBSD JAIL
sun microsystems(=oracle에 합병됨) 상용 unix Solaris의 Containers(Zone)
Linux = Linux Container 라는 LXC
google= lmctfy(=Let Me Contain That For You)
과거의 LXC 기술이 잘 활용되지 않은 이유는 LXC의 cgroup과 namespace 등의 사용 복잡하고 어려웠기 때문에 활용하지 않음.
현재의 컨테이너 기술
DOcker 를 통해 App의 LXC를 사용하고, 사용자는 도커 명령어를 활용해서 컨테이너 기술을 사용하게 함
2. 가상머신 vs 컨테이너 비교
1)가상 머신방식
App = application
Bins = binary / Lib = Library
Guest OS = Host OS단에서 여러 개의 OS를 만들 수 있다.
Host OS = Guest OS 의 집합이라 생각하면 되며, 예를 들어 vmware workstation, virtual box 의 개념이라 생각하면 된다. 보통 노트북의 OS는 win7,10,11 이지만, 이에 해당하는 낱개의 개별적인 guest OS는 여러 개의 리눅스 윈도우 서버등을 만들 수 있다.
HyperVisor = 공유 컴퓨팅 자원을 관리하고 가상머신들을 control(I/O 명령 처리)하는 중간 관리자
특정서버의 BIOS 를 설정해주는 구간
2)컨테이너 방식
해당 host OS의 자원(CPU,memory, .. 등등)을 나누어서 사용하게 됨.
자체 Host OS의 kernel을 컨테이너가 공유 받음
Host OS=Operating System 위의 그림과 같이 container engine을 설치 -> container engine 위에 컨테이너를 만드는 것임.
방식 | 가상 머신 | 컨테이너 |
가상하드웨어 | 가상 하드웨어를 만드는 개념이며, Host OS의 BIOS에서는 CPU 가상화 설정이 필요함 |
만들지 않음 (BIOS에서 CPU 가상화 설정을 할 필요 없음) |
BIOS 설정 | 있다 =>물리적 서버를 활용 |
없다 -> BIOS 나 booting 설정 OS 설정의 방법이 따로 필요 없음 |
성능 | 무거움 | 가상화보다는 overhead가 적어서 가벼움 |
목적 | 가상화기술 서로 다른 환경을 어떻게 효율적으로 emulate 할지를 지향 |
컨테이너 기술 application의 실행환경을 모아서 이식성을 높임, 확장성이 좋은 환경에서 작동하는 것을 지향 |
해당 내용은 docker process에 있는 컨테이너에 접속해서 커널 버젼을 확인한 명령어이고,
나머지 host OS 의 커널 버젼을 확인한 명령어이다. 그래서 서로 커널버젼은 동일한것을 알 수 있다.
도커에서의 명령어를 수행하기 위한 옵션 등의 개념과,
Dockerfile, image , registry , container, 등의 개념을 파악하기 위한 도식화 그림은 다음과 같다.
docker 구성요소
다음과 같은 구성요소와 이러한 것들이 조합되어 application 실행 환경을 구축한다.
도커 구성요소 | |
docker engine | 도커 이미를 생성 및 컨테이너를 기동한다. -docker 명령어와 Dockerfile 이미지 생성도 수행함 |
docker registry | 이미지 공개 및 공유하는 기능 -container 의 바탕이 되는 도커 이미지를 공개 및 공유하기 위한 registry 기능 -docker 공식 registry인 docker hub(http://hub.docker.com)도 이 도커 레지스트리를 사용한다. |
docker compose | 여러 컨테이너 통합 관리 -여러 개의 컨테이너 구성 정보를 코드로 정의하고, 명령어를 실행함으로서 application 실행환경을 구성하는 컨테이너의 일원화 관리할 수 있는 툴 |
Docker Machine | 도커 실행 환경 구축 -localhost 용의 virtualbox, workstation 뿐만 아니라, AWS EC2, MS azure 같은 클라우드 환경에 docker 실행환경을 명령어로 자동 생성하기 위한 툴 |
Docker Swarm | -여러 도커 host 들의 클러스터화 하는 툴 (대개 5개 ~이상으로 가능함) -클러스터를 관리하거나 api를 제공하는 역할=manager -도커 컨테이너 실행하는 역할 = node |