docker란?

2020. 1. 20. 12:53devops/docker

docker가 나오기 이전까지

docker가 나오기 이전까지 Hypervisor위에서 여러개의 os(guest OS)를 하나의 호스트에서 생성하여 사용하는 방식입니다. 각 guestOS는 window, linux, ubuntu구분하지 않고 사용할 수 있습니다. 각 guestOS는 서로 독립된 공간과 hostOS의 자원을 할당받습니다. 

 

위의 설명과 같은 기능을 하는 유명한 software는 Virtual Box와 Vmware가 있습니다. 하지만 hostOS의 자원을 할당하여 guestOS를 실행시키면 본래와는 안좋은 성능으로 실행됩니다. 그뿐만 아니라 해당 os에 필요한 파일, 라이브러리, 데이터 들이 포함되기 때문에 이미지의 크기또한 커집니다.

 

즉 가상머신은 완전한 os를 실행시킬 수 있다는 장점이 있지만 일반 hostOS만큼의 성능을 가지지 못하며 수기가 까지하는 이미지를 여러개 실행시키기에는 배보다 배꼽이 더 큰 상황이됩니다. 

 

그에 반해 도커는 ???

컨테이너를 쌓고가는 고래가 인상적이다.....

도커는 위의 virtual Box와 vmware에 비해 리눅스 자체 기술인 chroot, namespace, cgroup 등을 이용하여 프로세스 단위의 격리 단위를 만들어 주기 때문에 성능 손실이 거의 없습니다. 아직 리눅스를 잘 모르지만 각 기술을 간단하게 설명하자면 

  • chroot(change root directory): 프로세스가 실행되는 루트를 변경하는 일을 합니다. 이로 인해 특정 프로세스가 상위 디렉토리에 접근할 수 없도록 바꿉니다.  

  • namespace: 한 system에서 수행하지만 각각 별개의 독립공간 인것 처럼 격리된 환경을 제공한다. 

  • cgroup: 프로세스들의 자원의 사용을 제한하고 격리시키는 리눅스 커널 기능이다.  

위와 같은 리눅스 기술을 사용하여 프로세스를 분리하여 독립적으로 실행하는 것 같이 만들어서 docker는 성능 손실을 거의 없애는 것 같습니다. 그리고 또한 컨테이너 안에 필요한 라이브러리 및 파일만 존재하기 때문에 이미지로 만들었을 때 가상머신과 다르게 용량도 대폭 줄어듭니다. 따라서 배포하는 시간이 가상머신에 비해 빠르며 가상화된 공간을 사용할 때의 성능 손실도 거의 없다는 것이 장점입니다. 

 

개발 및 배포

개발자가 소프트웨어를 개발하다 보면 특정 os만을 위해 개발할 수도 있고 아니면 범용적으로 사용하기 위해 개발할 수도 있습니다. 범용적으로 개발할 때면 os별 오류는 없는지 모두 잘 돌아가는지 확인이 필요한데요. 그럼 그 프로젝트에 라이브러리를 다시 설치하는 과정 및 의존성으로 오류가 발생할 수 있는 문제가 발생할 수 있습니다. 그러나 도커는 hostOS위에서 완전히 독립적인 환경으로 개발을하기 때문에 도커 이미지라는 일종의 패키지를 만들어 놓으면 특별한 설치 및 과정 없이 다른 컴퓨터에서도 바로 실행할 수 있습니다. 즉 개발을 진행했던 환경을 완전히 복사한 컨테이너를 만들어서 다른 환경의 컴퓨터에서도 이 컨테이너를 활용하여 전혀 문제없이 사용할 수 있습니다. 

 

요약

이전에는 virtual machine을 사용하여 hostOS의 자원을 guestOS에 할당하여서 성능의 문제가 생기고 완전한 OS를 설치하기 때문에 각종 파일 및 라이브러리 파일이 필요하기 때문에 배보다 배꼽이 더 커지는 문제가 발생했습니다. 이러한 문제점을 해결하기 위해 docker는 linux의 각종 프로세스 분리 및 독립적인 공간을 만들어주는 기술을 사용하여 성능의 문제를 없앴고 이미지에는 필요한 파일 및 라이브러리만 존재하기 때문에 virtual machine보다 훨씬 가볍게 개발 및 배포할 수 있습니다. 

 

 

'devops > docker' 카테고리의 다른 글

docker 네트워크  (1) 2020.01.22
container를 외부에 노출하기  (0) 2020.01.22
docker 컨테이너 사용해보기  (0) 2020.01.21
docker image, container  (0) 2020.01.20
docker 설치-macOS  (0) 2020.01.20