이번 포스팅은 Docke에 대해서 간단할 핵심 설명을 포스팅하고자합니다.
Doker라는 것은 0.9버전 부터 직접 개발한 libcontainer를 사용하고 있다고 합니다.
가상화를 사용하는 이유는?
가상화를 사용하는 이유는 향상된 컴퓨터의 성능을 더욱 효율적있게 사용하기 위해 가상화 기술이 많이 등장 하였습니다. 서버 관리자 입장에서는 CPU 사용률이 단 10%대밖에 되지 않는 활용도가 낮은 서버들은 리소스 낭비일 수밖에 없습니다. 그렇다고 모든 서비스를 한 서버 안 에서 올린다면 안정성에 문제가 발생할 수 있습니다.
그렇기 때문에 안정성을 높이고 리소스도 최대한 활용할 수 있는 방법으로 나타낸 것이 바로 가상화입니다.
모두가 알고 있는 대표적인 가상화 플랫폼은 VM(Virtual Box)가 있습니다. VM은 누구나 아는 OS 가상화 프로그램인 그렇다면 컨테이너란 무엇일까요?
컨테이너란?
컨테이너란 가상화 기술 중 하나로 말할 수 있으며 대표적으로 LXC(Linux Container)가 있습니다.
기존 OS를 가상화 시키던 것과 달리 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식으로 이루어집니다.한 서버의 여러 OS를 가상화 하여 사용하는 것과 컨테이너 방식으로 프로세스를 격리시켜 동작하는 방법이 어떠한 차이점을 가지고 있을까요?
VM 가상화 플랫폼 vs Docker 가상화 플랫폼
기존에 우리에게 익숙한 VM의 같은 경우에는 Host OS 위에 가상화를 시키기 위한 Hypervisor 엔진 그리고 그 위에 Guest OS를 올려 사용합니다. 이는 가상화된 하드웨어 위에 OS가 올라가는 형태로 거의 완벽하게 Host와 분리된다고 봐도 무방합니다. 반면에 컨테이너 기반 가상화는 Doker엔진 위에 Aplication 실행에 필요한 바이너리만 올라가게 됩니다.
OS 가상화를 보면 Host OS와 완전히 분리되는 장점은 있지만 OS위에 OS를 올리기 때문에 무겁고 실행이 더욱 느릴수 밖에 없습니다. 하지만 컨테이너 기반 가상화는 Host OS 그리고 Doker 엔진위에서 바로 동작해 Host의 커널을 공유합니다. 커널을 공유하게 되면 io처리가 쉽게 되어 성능의 효율을 높일 수 있습니다.
컨테이너를 사용하는 것은 가상 머신을 생성하는 것이 아닌 Host OS가 사용하는 자원을 분리하여 여러 환경을 만들 수 있도록 해주는 것입니다.
이렇게 정리해보니 컨테이너 기반이 OS 가상화보다 뛰어나다 라고 말하는 것 같지만 사실상 그렇다고만 할 수 없습니다.
Doker를 소개하는 포스팅이므로 OS가상화에 비해 컨테이너 기반 가상화가 좋은 점을 강조해 Doker를 사용하는 이유에 대해 설명한 것입니다.
OS가상화는 컨테이너 가상화보다 더 높은 격리 레벨을 지원합니다. 이는 보안적인 측면에서 더욱 유리합니다.
또한 OS가상화의 커널을 공유하지 않는 장점 또한 있습니다. 커널을 공유하지 않는 만큼 멀티 OS가 가능하다는 것 입니다. 커널을 공유하지 않기 때문에 멀티 OS가 불가능 하다는 것은 Linux위에 Window를 올릴 수 없다는 단점이 존재합니다.
그럼에도 Doker를 사용하는 이유는 성능향상, 뛰어난 이식성, 쉽게 Scale Out을 할 수 있는 유연성이라 생각됩니다.
Doker Image
Doker Image라는 것은 컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것이라고 생각 하면 됩니다.그림과 같인 Image를 컨테이너에 담고 실행를 시킨다면 해당 프로세스가 동작하게 되는 것입니다.
그럼 어떻게 이미지를 만드는지 알기 위해 이미지가 만들어지는 방식을 알아보도록 하겠습니다.
다음 그림을 보면 ubuntu 이미지를 만들기 위해 Layer A,B,C가 들어갑니다. 그럼 nginx 이미지가 만들어진다고 생각하면 어떻게 될까요? 이미 Layer A,B,C로 만들어진 ubuntu 이미지를 베이스 이미지로 사용해 베이스 이미지에 nginx만 더하게 됩니다. 그렇다면 실직적으로 Layer A,B,C,nginx가 더해진 것이지만 과정은
ubuntu + nginx가 더해진 것입니다. 그렇다면 web app 이미지를 만들려고 할 땐 어떻게 될까요? ubuntu이미지 nginx를 올리고 web app을 올리는 것이 아닌 이미 만들어진 nginx 베이스 이미지에 web app을 올려 이미지를 만들게 됩니다.
이제 이미지가 어떻게 만들어지는지 알았다면 실제로 Image를 만들어보는 Docker File에 대해 알아보겠습니다.
Docker File
뒤에서 설명했듯이 Docker Image들을 저장하고 배포하는 Docker Hub는 정말 잘 활성화가 되어 있습니다.
이미 여러 회사에서 소프트웨어를 Doker Hub를 통해서 배포하기 시작하고 우리는 Docker Hub에서
Image를 pull을 이용해 간단한 컨테이너에 넣어서 사용할 수 있습니다. 하지만 이는 무언가 부족한 부분이 있습니다.만약 배포판이 없다면? 배포판 보다 더욱 보완하고 싶다면? 그럴때 사용 할 수 있는 것이 Docker File입니다.
그 뜻은 Docker File만 읽을 수 있다면 해당 이미지가 어떻게 구성이 되어 있는지도 알 수 있다는 의미가 됩니다.
- Docker Hub
도커 이미지의 용량은 보통 수백메가로 엄청난 크기를 자랑합니다. 이렇게 큰 용량의 이미지를 서버에 저장하고
관리하는 것은 쉽지 않는데 도커는 Docker Hub를 통해 공개 이미지를 무료로 관리해 줍니다. - Command 와 API
도커 클라이언트의 커맨드 명령어는 정말로 잘 만들어져 있습니다. 대부분의 명령어는 직관적이고 사용하기
쉬우며 컨테이너의 복잡한 시스템 구성을 이해하지 못해도 편하게 사용할 수 있습니다. 또한 http기반의
Rest API도 지원하고 확장성이 굉장히 좋으며 훌륭한 3rd party 툴이 나오기 좋은 환경입니다. - 유용한 새로운 기능들
도커는 발전속도가 아주 빠른 오픈소스입니다. 사용하면서 부족하다고 느낀 부분에는 빠르게 개선하고
새로운 버전이 나오면 유용한 기능들이 대폭 추가됩니다.
Docker Hub & Docker Registry
Docker Hub에서 이미지를 관리해주고 저장합니다. 위에서도 많은 회사들이 Docker를 이용해 소프트웨어를 배포하기 시작했고 공개이미지들을 공유할 수 있습니다. Docker Hub를 이용하면 손쉽게 image를 pull받아
컨테이너에 적용 시켜줄 수 있습니다.
그렇다면 Docker repository란 무엇일까요?
Docker Hub처럼 공개된 방식이 아닌 비공개적으로 격리된 저장소를 구축할 수 있습니다.
다음은 Docker Image를 Pull받기 위한 url입니다. 그림과 같이 앞에 url을 적지 않으면 default로 Docker Hub에 Image를 pull받게 되고 url을 적여주면 사설 저장소에서 이미지를 받을 수 있습니다.
Docker Archtecture
이제 Docker에 대한 핵심 사항을 알아보았습니다.
이제 해당 그림을 봐도 Docker가 어떻게 구성되고 동작하는지 알 수 있을 것입니다.
Docker의 사용량은 다음과 같이 꾸준히 증가하고 있습니다. 이제 Docker의 개념을 모른다 하더라도 Docker를 못들어본적은 없을 정도로 많은 사람들이 Docker를 이용하고 있습니다.격리된 프로세스를 통해 이식성, 유연성 Docker들의 이러한 장점을 이제 서버 관리 표준이 되지 않을까 생각됩니다.
참고 자료
'프론트 엔드 > Doker' 카테고리의 다른 글
[Docker] 도커 설치하기 (0) | 2023.01.06 |
---|---|
[Docker] 쿠버네티스란 무엇인가? (1) | 2023.01.05 |
[Doker] Docker를 사용한 React 환경 구성 (0) | 2022.04.01 |