[Docker] Docker란 무엇인가?

728x90
반응형
SMALL

출처 : https://www.docker.com/

 

Docker

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 

 

즉, 서비스 운영 환경을 묶어서 손쉽게 배포하고 실행하는 경량 컨테이너 기술이다.

 

다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.

 

백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 PC, Azure, Google Cloud 등 어디에서든 실행할 수 있다.

 

Container

컨테이너는 이미지를 실행한 상태이다. 이미지로 여러 개의 컨테이너를 만들 수 있다.

 

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다. 가상화 기술의 하나지만 기존 방식과는 차이가 있다.

 

기존의 가상화 방식은 주로 OS를 가상화했다. VMware, VirtualBox 같은 가상 머신은 호스트 OS 위에 게스트 OS 전체를 가상화하여 사용하는 방식이다.

 

이 방식은 여러 가지 OS를 가상화할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에서는 사용할 수 없었다.

 

출처 : https://www.docker.com/

 

 

이러한 상황을 개선하기 위해 CPU 가상화 기술(HVM)을 이용한 KVM(Kernel-based Virtual Machine)과 반가상화(Paravirtualization) 방식의 Xen이 등장했다.

 

이 방식은 게스트 OS가 필요하긴 하지만 전체 OS를 가상화하는 방식이 아니였기에 호스트형 가상화 방식에 비해 성능이 향상되었다.

 

가상 머신은 완전한 컴퓨터, 즉 항상 게스트 OS 설치가 필요하다.

 

이미지 안에 OS가 포함되기 때문에 이미지 용량이 커지고 네트워크를 통한 가상화 이미지를 주고받는 것이 부담스럽다.

 

 

 

출처 : https://www.docker.com/

 

 

추가적인 OS를 설치하여 가상화하는 방법(전 가상화, 반가상화)은 성능 문제가 있기에 이를 개선하기 위해 프로세스를 격리하는 방식이 등장했다.

 

리눅스에서는 이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다.

 

도커는 리눅스 컨테이너를 사용하여 이를 구현했다.

 

CPU나 메모리는 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없다.

 

 

특징

  • 게스트 OS를 설치하지 않는다. 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치한다.
    • 이미지 용량이 줄어들고, 호스트와 OS 자원 공유가 가능하다.

 

  • 하드웨어 가상화 계층이 없다.
    • 메모리 접근, 파일 시스템, 네트워크 전송 속도가 가상 머신에 비해 빠르다.
    • 호스트와 도커 컨테이너 간 성능 차이가 크지 않다.

 

  • 다양한 API를 제공한다.
    • 자동화도 가능하기에 개발과 서버 운영에 유용하다.

 

  • 이미지 생성과 배포에 특화되었다.
    • 이미지 버전 관리 가능, 중앙 저장소에 이미지를 올리고 받을 수 있다.

 

  • Dokcer Hub를 제공한다.
※ Doker hub : https://hub.docker.com/

도커 이미지는 Doker hub에 등록하거나 Docker Registry를 직접 만들어 관리할 수 있다.

 

 

image

이미지는 컨테이너 실행에 필요한 설정값 등을 포함하고 있는 것으로 상태 값을 가지지 않고 변하지 않는다.

 

이미지는 서비스 운영에 필요한 서버 프로그램, 소스 코드, 컴파일된 실행 파일을 묶은 형태이다.

 

저장소에 올리고 받는 것이 이미지이다.

 

컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장된다.

 

같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고, 컨테이너의 상태가 바뀌거나 삭제되어도 이미지는 변하지 않고 남아있는다.

 

예로 Ubuntu 이미지는 Ubuntu를 실행하기 위한 모든 파일을 가지고 있다.

 

 

 

 

이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기에 추가로 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없다.

 

미리 만들어 놓은 이미지를 다운로드하고 컨테이너를 생성하기만 하면 된다.

 

한 서버에 여러 개의 컨테이너를 실행할 수 있고, 수천 대의 서버도 문제없다.

 

※ Immutable Infrastructure

호스트 OS와 서비스 운영 환경(서버 프로그램, 소스 코드, 컴파일된 바이너리)을 분리하여 이해하고, 분리한 것들 중 서비스 환경을 이미지화하여 배포한 뒤 가급적 변경하지 않고 사용하는 것을 의미한다.


즉, 서비스 운영 환경을 이미지로 생성하여 서버에 배포하여 실행한다.

서비스가 업데이트되면 운영 환경 자체를 변경하지 않고, 이미지를 새로 생성하여 배포한다. 

기존 서비스 운영 환경 이미지는 버려진다.


장점

  • 편리한 관리 : 서비스 환경 이미지만 관리, 중앙 관리를 통한 체계적인 배포와 관리, 이미지 생성에 버전 관리 시스템 활용

  • 확장 : 이미지 하나로 서버를 계속 찍어낼 수 있음, 클라우드 플랫폼의 자동 확장 기능과 연동하여 손쉽게 확장 가능

  • 테스트 : 이미지를 실행만 하면 서비스 운영 환경과 동일한 환경이 구성된다. 테스트 간편

  • 가볍다 : 운영체제와 서비스 환경을 분리하여 가볍고 어디서든 실행 가능하다.
728x90
반응형
LIST

'Develope > Docker' 카테고리의 다른 글

[Docker] Docker 명령어 정리  (0) 2021.02.01