Docker란 Go언어로 작성된 리눅스 컨테이너 기반으로하는 오픈소스 가상화 플랫폼이다.
현재 Docker 0.9버전 부터는 직접 개발한 libcontainer 컨테이너를 사용하고 있다.
간단하게 말하면 리눅스에서 돌아가는 프로그램을 PC에서 동작하게 할 수 있도록 제공하는 것 + 쉽고(Dockerfile) + 빠르게 (Container)
가상화를 사용하는 이유는?
이제는 향상된 컴퓨터의 성능을 더욱 효율적으로 사용하기 위해 가상화 기술이 많이 등장하였습니다.
서버 관리자 입장에서 CPU 사용률이 10%대 밖에 되지 않는 활용도가 낮은 서버들의 리소스 낭비일 수밖에 없습니다.
그렇다고 모든 서비스를 한 서버 안에 올린다면 안정성에 문제가 생길 수도 있습니다.
그래서 안정성을 높이며 리소스도 최대한 활용할 수 있는 방법으로 나타난게 서버 가상화입니다.
모두가 아는 대표적인 가상화 플랫폼으로는 VM이 있습니다. VM은 누구나 아는 OS가상화지요. 그렇다면 컨테이너란 무엇일까요?
컨테이너란?
컨테이너는 가상화 기술 중 하나로 대표적으로 LXC(Linux Container)가 있습니다.
기존 OS를 가상화 시키던 것과 달리 컨테이너는 OS레벨의 가상화로 프로세스를 격리 시켜 동작하는 방식으로 이루어집니다.
한 서버의 여러 OS를 가상화 하여 사용하는 것과 컨테이너 방식으로 프로세스를 격리 시켜 동작하는 방법은 어떠한 차이점이 있을까요?
VM 가상화 플랫폼 vs Docker 가상화 플랫폼
기존에 우리에게 익숙한 VM같은 경우엔 Host OS 위에 가상화를 시키기 위한 Hypervisor 엔진 그리고 그 위에 Guest OS를 올려 사용합니다.
이는 가상화 된 하드웨어 위에 OS가 올라가는 형태로 거의 완벽하게 Host와 분리된다고 봐도 무방합니다.
반면에 컨테이너 기반 가상화는 Docker 엔진 위에 Application 실행에 필요한 바이너리만 올라가게 됩니다.
OS 가상화를 보면 Host OS와 완전히 분리되는 장점은 있지만 OS위에 OS를 올리기 때문에 무겁고 느릴수 밖에 없습니다.
하지만 컨테이너 기반 가상화는 Host OS 그리고 Docker 엔진 위에서 바로 동작하며 Host의 커널을 공유합니다.
커널을 공유하게 되면 io처리가 쉽게 되어 성능의 효율을 높일 수 있습니다.
컨테이너를 사용하는 것은 가상 머신을 생성하는 것이 아니라 Host OS가 사용하는 자원을 분리하여 여러 환경을 만들 수 있도록 하는 것입니다.
이렇게 쓰고 보니 컨테이너 기반이 OS가상화보다 뛰어나다 라고 말하는 것 같지만 그렇지는 않습니다.
Linux Container
- CASE 1 환경 표준화 - 환경이 일정하지 않아서 생기는 문제
- CASE 2 수작업으로 일치시키는 환경 구성
- CASE 3 리소스 격리성
위의 세 가지 문제 및 기술을 해결하는 방법 중에 리눅스 컨테이너(Linux Container)가 있습니다.
Linux Container란
리눅스 기반의 기술 중에 하나로 필요한 라이브러리와 어플리케이션을 모아서 마치 별도의 서버처럼 구성한 것을 말합니다. 컨테이너를 이루는 네트워크 설정, 환경 변수 등의 시스템 자원은 각 컨테이너가 독립적으로 소유하고 있습니다.
- 프로세스의 구획화
- 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스 할 수 있습니다.
- 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없습니다.
- 네트워크의 구획화
- 기본으로 컨테이너 하나에 IP 주소가 할당되어 있습니다.
- 파일시스템의 구획화
- 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있습니다. 그렇기 때문에 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있습니다.
다시 한번 물어보면, 기존에 이용해오던 가상머신이랑 비슷하지 않나요?
- 비슷할 뿐 가상화와는 다른 기술입니다.
컨테이너 기술의 역사
FreeBSD Jail
- 오픈소스 Unix인 FreeBSD에서 사용된 기술
- Unix 버전을 대상으로 하며, Jail 이라는 명칭의 컨테이너를 사용
Solaris Containers
- Oracle의 상용 Unix인 Solaris에서 사용하는 컨테이너로, 2005년인 Solaris 10에서 추가된 기능
- Solaris 존, Solaris 리소스 매니저로 컨테이너에 대한 관리를 수행
- Docker가 나오기 10년 전 기술이지만 Docker 와 상당히 유사한 구조를 가지고 있음
Docker 만의 특징
- 가장 큰 특징은 어플리케이션에 대한 환경을 Docker는 격리성을 중심으로 한 VM의 관점으로 보다는 Container의 관점에서 빠르고, 개발자와 사용자 커뮤니티를 중심으로 혜택을 제공하는데 있습니다.
Docker HUB
'Data Engineer' 카테고리의 다른 글
Status code 정리 (100 ~ 500) (0) | 2023.05.08 |
---|---|
SQL Deeper (ACID) (0) | 2023.05.08 |
Data Models이란? (0) | 2023.05.08 |
DBMS vs RDBMS의 차이 (0) | 2023.05.08 |
SQL이란? (0) | 2023.05.08 |