- Published on
Docker란?
- Authors
- Name
- Luffy Yeon
Docker란?
컨테이너
애플리케이션의 코드, 런타임, 시스템도구, 라이브러리 등 애플리케이션의 구성을 인스턴스로 패키징하는 방법을 제공한다. 컨테이너는 하나의 커널(OS)를 공유하여 사용된다.
실행에 필요한 모든 파일을 포함하여 전체 런타임 환경에서 애플리케이션을 패키지화하고 분리하는 기술을 가지고 있다. 시스템의 나머지 부분과 격리된 프로세스 세트로 고유한 이미지로 제공되므로 개발 → 테스트 → 프로적션 까지 이식성과 일관성을 유지할 수 있다. 이는 애플리케이션을 실행하는 컨테이너는 필수 라이브러리, 종속요소와 파일을 사용하므로 원할한 프로덕션 진행이 가능하고 할 수있다. 그리고 컨테이너 이미지 배포는 새로운 운영체제를 설치하는 것보다 훨씬 간편하게 동일한 환경을 구성하여 배포할 수 있다.
컨테이너 사용이유
- 컨테이너는 가상머신보다 공간을 적게 차지하며 재기동성이 가상머신보다 좋다.
- 애플리케이션 동일한 환경 세트로 개발 → 테스트 → 프로덕션까지의 이식성 일관성에 용이하다.
- 컨테이너는 동적으로 리소스를 사용할 수 있어 별도의 리소스를 할당할 필요가없다.
- 컨테이너는 서버의 밀도를 최적화하여 사용할 수 있다. 서버에서 사용가능한 리소스를 과다하게 사용하지 않는 선에서 최적화된 리소스 사용이 가능하다.
- 컨테이너는 하나의 커널(OS)에서 동작하기 때문에 업데이트 또는 패치 작업 등을 한번만 수행하면 변경사항이 모든 컨테이너에 적용되어 효율적인 관리가 가능하다.
컨테이너 & 가상화
가상화는 단일 하드웨어 시스템에서 여러 운영체제가 동시에 실행 될 수 있도록 한다.
컨테이너는 동일한 운영체제 커널을 공유하고 시스템의 나머지 부분으로부터 애플리케이션 프로세스를 격리한다.
가상화는 하드웨어를 에뮬레이션하고 이를 통해 여러 운영체제를 동시에 실행한다. 이는 컨테이너를 사용하는 것 만큼 경량화할 수는 없다.
오케스트레이션
애플리케이션의 컨테이너를 배포하고 구성하는것을 컨테이너 오케스트레이션이라고 한다.
시스템 관리에서 오케스트레이션은 컴퓨터 시스템 및 소프트웨어의 자동화 된 구성, 조정 및 관리를 의미한다.
Docker
컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술 ( 여러 환경문제 완화 및 반복적인 작업 가속화에 도움을 준다.)
Docker를 사용하면 컨테이너를 매우 가벼운 모듈식 가상머신처럼 다룰 수 있다. 그리고 컨테이너 구축, 배포, 복사 등 한 환경에서 다른 환경으로의 이동을 유연하게 사용이 가능하다. Docker의 기술은 프로세스를 분리하여 독립적이고 효율적으로 실행될 수 있게한다. 그리고 독립적으로 실행되기 때문에 보안 유지도 가능하다.
Docker를 포함한 컨테이너 툴은 이미지 기반 배포 모델을 제공하기 때문에 여러 환경에서 애플리케이션 또는 서비스를 손쉽게 공유할 수 있다.
Docker는 처음에 LXC 기술을 기반으로 구축되었으나 현재는 종속 관계에서 벗어났다. Linux 컨테이너는 멀티 프로세스를 관리할 수 있는 시스템을 사용하여 전체 애플리케이션을 하나로 실행 할 수 있다. Docker는 애플리케이션에서 개별 프로세스로 세분화 하도록 수행할수 있는 툴을 제공한다.
Docker 컨테이너 이점
모듈화 : Docker의 컨테이너화 접근 방식은 전체 애플리케이션을 컨테이너별로 분해할 필요 없이 애플리케이션의 일부를 분해하고, 업데이트 또는 복구가 가능하다.
계층 및 이미지 버전제어 : 각 이미지 파일은 일련의 계층으로 구성되어있으며 계층들은 단일 이미지로 결합된다. 이미지가 변경될 때 계층이 생성되고 실행 또는 복사 같은 명령을 지정할 때마다 새로운 계층이 생성된다. Docker는 이러한 계층들을 재사용하여 프로세스를 구축하여 빠른속도로 컨테이너 구축이 가능하다. 변경사항을 이미지 사이에서 공유하므로 컨테이너 구축 효율성을 올릴 수 있다.
롤백 : 모든 이미지에는 계층이 있으며 해당 계층을 기반으로 이전 버전으로 롤백이 가능하다.
신속한배포 : 새로운 하드웨어를 준비하고 환경을 구성하는 등의 준비를 단축할 수 있다. Docker 기반의 컨테이너는 각 프로세스에 대한 컨테이너를 생성함으로써 빠르게 배포시간을 단축 할 수 있다.
Docker는 단일 컨테이너 관리에 적합하도록 만들어져있기 때문에 여러개로 세분화된 컨테이너와 컨테이너화된 앱을 많이 사용하기 시작하게된다면 관리 및 오케스트레이션이 어려워질 수 있다. 컨테이너의 네트워킹, 보안, 텔레메트리와 같은 서비스를 제공하기위해 컨테이너를 그룹화 해야하는데 이러한 역할을 하는것이 쿠버네티스이다.
[Ref]: