본문 바로가기
IT

도커 (Docker) 소프트웨어

by 비준 2022. 9. 23.

도커 (Docker)

도커 (Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술을 사용하여 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.

도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 모든 것을 말한다. 이는 실행 중인 환경에 관계없이 언제나 동일 하게 실행될 것을 보증한다.

 

도커는 리눅스에서 운영 체제 수준 가상화의 추상화 및 자동화 계층을 추가적으로 제공한다. 도커는 cgroups와 커널 이름공간과 같은 리눅스 커널의 기능들과 OverayFS, aufs와 같은 유니언 가능 파일 시스템의 리소스 격리 기능을 사용하며, 이를 통해 독립적인 "컨테이너"가 하나의 리눅스 인스턴스 안에서 실행할 수 있게 함으로써 가상 머신을 시작하여 유지보수해야 하는 부담을 없애준다.

 

리눅스 커널의 이름공간 지원은 대체적으로 프로세스 트리, 네트워크 사용자 ID, 마운트 된 파일 시스템을 포함한 운영 환경에 대한 응용 프로그램의 관점을 격리시키지만 커널의 cgroup들은 CPU, 메모리, 블록 입출력, 네트워크를 포함한 리소스 제한을 제공한다. 버전 0.9부터 도커는 libvirt, LXC (리눅스 컨테이너), systemd-nspawn을 통한 추상화된 가상화 인터페이스를 사용하는 것뿐만 아니라 리눅스 커널이 제공하는 가상화 기능을 직접 사용하기 위한 유일한 수단으로 libcontainer 라이브러리를 포함하고 있다.

도커  (Docker) - 개요

도커 베이스 이미지에 액션을 취하면 유니언 파일 시스템 계층들이 만들어지고 문서화되는데, 이렇게 함으로써 각 계층은 어떻게 액션을 재생성할지에 대해 완전하게 기술하게 된다. 이러한 전략은 이를테면 완전한 VM과 비교하면 도커의 이미지를 가볍게 만들어주며 오직 레이어 업데이트만 전파해주면 된다.

 

산업 애널리스트 기업 451 리서치에 따르면 "도커는 응용 프로그램과 그 의존성을 가진 컨테이너에 담을 수 있는 도구이며, 이 컨테이너는 어떠한 리눅스 서버에서라도 구동이 가능하다. 이것은 사내, 공용 클라우드, 개인 클라우드, 베어 메탈 등 응용 프로그램을 실행할 수 있는 곳에서는 유연성과 이식성을 적용하는데 도움을 준다" 도커는 고급 API를 구현함으로써 프로세스등을 별도의 장소에서 실행할 수 있는 가벼운 컨테이너들을 제공한다. 

 

리눅스 커널이 제공하는 기능들 (주로 cgroups와 이름공간)위에 빌드되기 때문에 도커 컨테이너는 가상 머신과 달리 별도의 운영체제를 요구하거나 포함하지 않는다. 그 대신, 커널의 기능에 의존하며 리소스 격리 (CPU, 메모리, 블록 입출력, 네트워크 등) 및 격리된 이름 공간을 사용하여 운영체제에 대한 응용 프로그램의 관점을 격리시킨다. 도커는 도커 0.9대부터 이용 가능한 libcontainer 라이브러리를 사용하거나 libvirt, LXC (리눅스 컨테이너), 또는 systemd-nspawn을 통해 간접적으로 리눅스 커널의 가상화 기능들에 접근한다. 도커는 매우 가볍기 때문에 하나의 서버나 가상 머신이 여러 컨테이너들을 동시에 구동할 수 있다.

 

컨테이너를 사용하여 리소스를 격리시키고 서비스를 제한 시키며, 프로세스를 예비할 수 있으며 이렇게 하여 지신만의 프로세스 ID 공간, 파일 시스템 구조, 네트워크 인터페이스를 갖고서 운영 체제에 대하여 거의 완전히 개인화된 관점을 갖게 한다. 여러 개의 컨테이너들은 동일한 커널은 공유하지만 각 컨테이너는 CPU, 메모리, 입출력과 같이 오직 정의된 양의 리소스만 제한을 받을 수 있다.  도커를 사용하여 컨테이너를 만들고 관리하면 다수의 응용 프로그램, 작업자의 작업, 다른 프로세스들이 자율적으로 하나의 물리 머신과 여러 개의 가상 머신을 통해 구동될 수 있게 되므로 고도의 분산 시스템을 생성하는 일이 단순해진다. 리소스가 사용 가능해질 때 또는 더 많은 노드가 필요할 때 노드가 배치될 수 있게 하므로 Apache Cassandra,   몽고 DB, Riak와 같은 시스템을 위한 PaaS 스타일의 배치 및 규모 증강이 가능해진다. 또 도커는 작업이나 워크로드 큐, 기타 분산 시스템들의 생성 및 운영을 단순하게 한다.

 

- 통합

도커는 다음을 포함한 다양한 인프라스트럭처 도구들에 통합 될 수 있다.

> 아마존 웹 서비스, Ansible, CFEngiinem Chef, 구글 클라우드 플랫폼, IBM 블루믹스, HPE Helion Stackato, Jelastic, 젠킨스, Kubernetes, 마이크로소프트 에저, 오픈스택 노바, OpenSVC, 오라클 컨테이너 클라우드 서비스, 퍼핏, Salt, Vagrant, VMware vSphere Integrated Containers 가 있다.

레드햇은 오픈시프트 Diego 프로젝트는 도커를 클라우드 파운드리 PaaS에 통합했다.

레드햇의 오픈시프트 PaaS는 도커 및 관련 프로젝트 (Kubernetes, Geard, Project Atomic 등를 V3 (2015년 6월)부터 통합하였다.

Apprenda PaaS는 제품 버전 6.0에 도커 컨테이너를 통합하였다.

역사 및 도구

- 역사

솔로몬 하익스는 프랑스에서 PaaS 기업인 닷클라우드 안에 내부 프로젝트로서 도커를 시작했다.

도커는 2013년 3월 오픈소스로 출시되었다.

 

- 도구

Docker Compose

Compose는 멀티 컨테이너 도커 애플리케이션을 정의하고 실행하는 도구이다. YAML 파일을 사용하여 애플리케이션의 서비스를 구성하여 하나의 명령를 가지고 모든 컨테이너의 생성 및 시작 프로세스를 수행한다.

 

- Docker Swarm

Docker Swarm은 도커 컨테이너의 네이티브 클러스터링 기능을 제공하며 도커 엔진을 하나의 가상 도커 엔진으로 탈바꿈시킨다. 도커 1.12 이상부터 Swarm 모드가 도커 엔진에 통합되어 있다.

댓글