Docker

[Docker] Docker란 무엇일까? / 컨테이너와 가상머신의 차이 / 왜 써야할까?

공영재 2022. 7. 17. 19:22

Docker 로고

 

Docker리눅스 컨테이너 기반의 일종의 가상 환경으로, 운영체제처럼 독립된 환경을 만들어주지만

 

실제 운영체제를 설치하는 것은 아니기에 설치 용량이 적고 실행 속도가 빠릅니다.

 

Github와 비슷한 Dockerhub를 통해

 

어플리케이션 구축/배포/버전관리 등이 가능하다는 점에서

 

어떻게 보면, Git과 꽤나 유사하다고 볼 수 있을 것 같습니다.

 

 

그렇다면 도커의 컨테이너와 가상머신(VM)과의 차이점은 무엇일까요?

 

 

도커(컨테이너)는 한 운영체제의 리소스를 공유하는 개념인 반면,

 

 가상머신(VM)은 한 운영체제의 리소스를 나눠서 분배해준다는 개념입니다.

 

가상머신의 경우 운영체제 내 독립적인 어플리케이션이 늘어날수록,

 

컨테이너에 비해 성능과 효율, 확장성이 떨어집니다.

 


 

다음으로는 도커에서 사용되는 용어들에 대해 알아보겠습니다.

 

 

도커에는 이미지레이어, 컨테이너라는 개념이 등장합니다.

 

먼저, 도커 이미지는 Github repository와 유사하게

 

프로세스를 실행하기 위한 모든 파일과 설정값을 지니고 있는 형태를 말합니다.

 

 그러한 설정값은 .dockerfile로 저장되어 있는데, 이를 build 함으로써 도커 이미지를 만들 수 있습니다.

 

 

Docker Image와 Container

 

만들어진 도커 이미지를 run 하면 이미지의 프로세스가 동작하는데, 이처럼 이미지를 실행한 상태를 컨테이너라고 합니다.

 

도커가 실행되면, 작업들이 기록되는 컨테이너 레이어가 추가되는데, 이미지에는 적용되지 않습니다.

 

즉, 도커 이미지 그 자체는 변경 불가합니다.

 

하지만 이렇게 컨테이너 레벨에서 일시적으로 진행한 작업들을 이미지에 추가하고 싶다면,

 

docker commit을 통해 컨테이너 레이어를 도커 이미지에 추가하여 새로운 이미지를 생성할 수 있습니다.

 

Image, Layer, Container의 관계

 

하지만 여기서 드는 궁금증이 있습니다.

 

저도 창업을 진행하며 Docker 없이도 개발에 막힘이 없었는데,

 

설치하기도 복잡한 Docker를 굳이 왜, 어떨 때 써야할까요?

 


 

Linux는 운영 체제의 특성 상 Ubuntu, Debian, CentOS, RedHat 등의

 

여러 배포판이 존재하는데, 각각의 배포판에 따라 패키지나 소프트웨어의 설치 방법이 다르므로

 

동일한 환경을 구성하기 복잡해집니다.

 

2021년 기준 Linux 배포판 점유율

 

또한 서비스가 커져 여러 서버를 운용하게 되면

 

운영체제 / 컴파일러 / 패키지 등이 모두 같을 수 없습니다.  

 

혹은 서비스 환경과 개발 환경의 운영 체제가 서로 다를 경우(Windows와 Linux를 교차운용하는 경우)에도 문제가 생깁니다.

 

(패키지의 의존성이 맞지 않을 경우 해결이 굉장히 귀찮아집니다.)

 

즉 환경이 조금이라도 다른 여러 서버를 운용하거나,

 

협업 시 로컬 환경과 상관없이 팀원끼리의 환경을 동기화하고 싶을 때,

 

혹은 하나의 서버에서 리소스를 공유하는 여러 컨테이너를 통해 다양한 서비스를 배포하고 싶을 때

 

 Docker를 사용함으로써 이러한 문제를 해결할 수 있습니다.

 

 

반응형
loading