[Docker]Docker(도커)란? (feat. Linux 컨테이너)
SW개발/IT 용어

[Docker]Docker(도커)란? (feat. Linux 컨테이너)

 

Docker 란?

도커는 IT 소프트웨어로서 Linux 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술이다.

도커를 사용하면 컨테이너를 매우 가벼운 모듈식 가상머신처럼 다룰 수 있게 된다. 또한 컨테이너를 구축, 배포, 복사하고

한 환경에서 다른 환경으로 이동하는 등 유연하게 사용할 수 있고, 애플리케이션을 클라우드에 최적화하도록 지원한다.

 

Linux 컨테이너란?

Linux 컨테이너는 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술이다.

하드웨어를 가상화하는 가상 머신(VM)과 달리 커널을 공유하는 방식이기 때문에 실행 속도가 빠르고, 성능상의 손실이 거의 없다.

컨테이너로 실행된 프로세스는 커널을 공유하지만, 리눅스 namespaces, cgroup, 루트 디렉터리 격리 등의 커널 기능을 활용해 격리되어 실행된다.

이러한 격리 기술 덕분에 호스트 머신에게는 프로세스로 인식되지만, 컨테이너 관점에서는 마치 독립적인 환경을 가진 가상머신처럼 보인다.

 

컨테이너와 가상머신의 차이

리눅스 컨테이너의 주요 특징

  • 운영체제 수준의 가상화 - 별도의 하드웨어 에뮬레이션 없이 리눅스 커널을 공유해 컨테이너를 실행, 게스트 OS 관리 필요 X
  • 빠른 속도와 효율성 - 하드웨어 에뮬레이션이 없어 컨테이너는 아주 빠르게 실행됨
  • 높은 이식성(portability) - 호스트의 환경이 아닌 독자적인 실행환경을 가지고 있음
  • 상태를 가지지 않음(stateless) - 컨테이너가 실행되는 환경은 독립적이어서 다른 컨테이너에게 영향을 주지 않음

 

컨테이너를 사용해야하는 이유

이렇듯 컨테이너를 사용하면 생기는 많은 장점들이 있다. 그렇다면 왜 사용해야 하는 것일까?

프로덕션 관점에서 살펴보자면 서버는 항상 같은 환경(구성)을 가지고 있을 수가 없다. 운영을 하면서 같은 역할을 수행하는 A서버와 B서버가 있다고 가정해보자. 큰 관점에서 보면 같은 역할을 하기에 같은 환경으로 간주할 수 있다. 하지만 이를 자세히 들여다보면 대부분 다른 부분이 존재하기 마련이다. (라이브러리의 버전이 다름, 코드가 다름 등) 

운영을 하다보면 자연스럽게 생기는 변동사항들 때문에 두 서버는 항상 동일하게 유지할 수 없다.

 

하지만 배포단위로서 컨테이너를 사용하면 실행되는 시점과 관계없이 항상 동일한 환경을 보장할 수 있다.(수정된 사항의 이미지만 재 빌드하면 되기 때문)

또한, 여러 개의 애플리케이션 별로 독자적인 환경을 준비하고 관리할 수 있다. 따라서 각 애플리케이션의 한 부분에 대한 수정이 일어날 때 그것과 관련된 컨테이너만 새로 배포하면 되기 때문에 서버 컴퓨터를 관리할 필요가 적어진다는 장점이 있다.

 

Docker 기술과 Linux 컨테이너와의 차이

도커 기술이 완벽하게 Linux 컨테이너와 동일하게 작동하지는 않는다. 도커는 LXC(Linux 컨테이너) 기술을 기반으로 구축하였지만 개발해나가면서 종속 관계를 벗어났다. 도커 기술은 컨테이너를 실행하는 기능 이상의 것들을 제공하고, 무엇보다도 컨테이너 생성 및 구축, 이미지 전송, 이미지 버전 관리 프로세스를 용이하게 해준다.

 

Docker 기술과 Linux 컨테이너와의 차이

 

Docker 컨테이너의 장점
  • 모듈성 
    • - 도커의 컨테이너화 접근 방식은 전체 애플리케이션을 분해할 필요 없이 애플리케이션의 일부를 분해하고
         업데이트 또는 복구하는 능력에 집중되어 있음
  • 계층 및 이미지 버전 제어 
    • - 각 도커 이미지 파일은 일련의 계층으로 이루어져 있음, 새로운 컨테이너를 구축할 때 이러한 계층을 사용하므로 구축 프로세스가 훨씬 빠름
  • 롤백 
    • - 모든 이미지에는 계층이 있으며, 현재의 이미지가 부적절할 경우 이전 버전으로 롤백할 수 있음
  • 신속한 배포 
    • - 컨테이너를 활용해 배포 시간을 몇초로 단축할 수 있음

 

728x90

'SW개발 > IT 용어' 카테고리의 다른 글

[Webhook]웹훅이란?  (5) 2021.05.27
[Kubernetes]쿠버네티스란?  (0) 2021.05.13
[HAProxy]HAProxy 란?  (2) 2021.04.07
[WAS, WSGI, CGI]WAS, WSGI, CGI 란?  (0) 2021.02.24
[REST]REST API 란?  (0) 2021.01.13