* 본 포스팅은 <Docker 도커 실전 가이드>에서 발췌한 내용으로 작성되었습니다.
Docker란 무엇인가?
가상화 기술 중 하나인 Docker는 Docker, Inc.(https://www.docker.com/)가 개발 중인 컨테이너 환경을 제공하기 위한 소프트웨어입니다. Docker는 애플리케이션이 움직이는 환경을 컨테이너라는 단위로 가상화하고, 이 컨테이너형 가상화뿐만 아니라 컨테이너의 베이스가 되는 이미지를 효율적으로 만드는 기능과 이미지를 배포하기 위한 구조도 갖추고 있는 것이 특징입니다.
이번 포스팅에서는 Docker의 구조에 대해, 특히 컨테이너형 가상화와 이미지에 관한 부분을 간략하게 설명해 드리겠습니다.
하이퍼바이저형 가상화의 단점
Docker가 제공하는 가상화의 장점 중 하나가 바로 효율성입니다. 효율성은 컨테이너형 가상화라는 기술에 의해 실현되고 있습니다. 지금까지는 가상화의 주류였던 하이퍼바이저형 기술에서는 가상화 환경의 단위가 하드웨어 전체 및 OS 전체였습니다. Window 또는 macOS나 Linux 등 다양한 OS를 그대로 움직일 수 있지만, 하이퍼바이저라는 프로그램이 가상화를 위해 개입되어야 했습니다.
하이퍼바이저 사용에 따라 성능 저하가 발생하거나 메모리 혹은 디스크와 같은 리소스를 가상 환경에 확보할 필요가 있어 리소스 소비량이 많아지는 단점이 있었습니다.
왜 Docker인가? 컨테이너형 가상화
하이퍼바이저와 달리 Docker는 컨테이너라는 단위로 환경을 가상화하고 있습니다. 컨테이너의 실체는 호스트 OS상의 프로세스로써 각각 컨테이너의 형태로 격리된 상태로 움직입니다. 격리된 컨테이너의 프로세서에서 다른 컨테이너나 호스트 환경의 프로세스에 접속할 수 없습니다. 컨테이너에 대해 별도의 루트 디렉터링(접속 가능한 파일 범위)이 할당되어 호스트 환경과는 별도의 네트워크와 ip 주소를 할당할 수 있습니다.
또한, 각각의 컨테이너에서 실행되는 프로세스에 대해 사용할 수 있는 호스트 환경의 CPU나 메모리 지원의 제한량을 설정할 수 있습니다. 프로세스 격리는 호스트 OS에서 실행되는 커널 기능이 사용되며, 프로세스의 실행에 따라 하이퍼바이저와 같은 프로그램이 개입하지 않고, 컨테이너마다 커널이라는 OS 기능이 각각 별도로 실행되지도 않습니다.
Linux에서 실행 중인 Docker의 경우 프로세스를 격리하기 위해 Linux 커널이 제공하는 cgroups이 사용되며, 루트 디렉터리를 격리하는 데 choot가 사용됩니다. Docker는 컨테이너 내에서 볼 수 있는 파일은 이미지 형태로 처리되며, 실제로는 호스트 환경의 파일 시스템에서 파일로 추출됩니다. 파일 시스템의 기능을 사용함으로써 동일한 이미지와 함께 실행 중인 컨테이너가 같은 파일에 기록되지 않으면 동일한 파일을 참조합니다.
이러한 이유로 Docker에서 사용하는 컨테이너형 가상화는 하이퍼바이저형 가상화보다 성능이 저하되는 소비 자원이 적다는 장점을 가지고 있습니다.
Docker 이미지
Dockert에는 immutable infrastructure(불변인프라)라는 개념이 도입되어 있습니다. 구체적으로는 일단 이미지로 만들어진 환경을 변경하지 않고, 컨테이너가 움직이는 동안은 파일을 변경해도 오리지널 이미지가 변경되지 않습니다.
통상적인 서버 관리에서 행해지는 애플리케이션이나 패키지의 업데이트도 Docker에서는 그것들이 적용된 이미지를 만들고, 새로운 이미지를 바탕으로 한 컨테이너를 다시 시작하여 수행합니다.
이렇게 함으로써 컨테이너의 구성을 구정화 할 수 있습니다.
또한 정상적인 환경에서 서비스가 실행 중인 상태에서 패키지 설치 등이 실행되지만, Docker 이미지를 빌드할 때는 서비스가 움직이지 않은 상태에서 커맨드 자체만이 실행됩니다.
따라서 Docker 이미지 빌드에 필요한 과정은 간단하게 마칠 수 있습니다. Docker 이미지 빌드는 항상 이전 단계의 이미지에 변경 사항을 저장하는 형태로 실행되기 때문에 항상 새로운 환경에서 새로운 패키지를 넣는 형태로 실행됩니다.
《Docker 도커 실전 가이드》
'IT 정보' 카테고리의 다른 글
[도커②] Docker 설치하기_Linux(Ubuntu) (0) | 2021.06.09 |
---|---|
[강화학습②] 마르코프 리워드 프로세스(Markov Reward Process) (0) | 2021.04.05 |
[강화학습①] 마르코프 결정 프로세스(Markov Decision Process) (0) | 2021.03.29 |