도커는 무엇이고 왜 필요할까?

hwamoc·2022년 4월 29일
0

본 글은 Udemy의 Docker & Kubernetes: 실전 가이드 - 2022년판을 수강하며 공부하고자 남긴 글입니다.
(부족한 부분이 있을 수 있음을 알려드립니다. 부족한 부분 댓글로 남겨주시는 것 환영입니다)

도커는 우선 컨테이너다.

컨테이너는 무엇인가? 🧐

컨테이너를 생각하면 수출입 관련 뉴스에서 꽤나 볼 수 있었던 화물선들이 옮기는 컨테이너가 떠오른다.
컨테이너는 프로젝트와 관련된 것들을 다 포함하고 있는 독립적인 패키징이다.
좀 더 쉽게 설명을 해보자면 시골의 논밭 옆에 혹은 이색적인 건축물 중에 컨테이너로 만든 집이 있지 않은가? 작업한 프로젝트를 어떤 한 생명체라고 예시를 든다면, 그 생명체가 살 수 있는 환경, (이를테면 온도나 습도 등)을 갖추어 생명체가 살 수 있는 모든 환경 조건을 다 갖춘채로 옮길 수 있는 컨테이너 집이다. (억지스러움 주의.. 🤔)

그럼 이 컨테이너라는 것이 왜 필요한 건가?

프로젝트를 만들 때 사용하는 언어나 기술들의 버전이 있다. 시간이 지나면서 새로운 버전들이 나온다.
노드를 예로 들어보겠다. 로컬 개발 환경에서 v16로 개발을 하며 이전의 버전에서는 오류를 일으키는 최신 기술로 작업을 했다면, 노드 버전을 업그레이드하지 않았던 테스트 서버나 배포 서버 혹은 다른 팀원들의 개발 환경에서 오류를 일으킬 것이다.

또 로컬 개발 환경 내에 여러 개의 프로젝트를 진행한다고 했을 때, 각 각의 프로젝트의 사용 언어의 버전이 다르다면 다른 프로젝트를 작업하려 할 때마다 해당 프로젝트의 버전으로 바꾸어야 하므로 번거로울 것이다.

로컬 개발 환경과 해당 프로젝트의 모든 서버들의 환경들을 일치시키는 작업들은 사실 가상 머신 (Virtual Machine)으로도 가능하다. 하지만 왜 가상 머신 대신에 컨테이너를 사용하는 것이 표준화 된 것일까?

가상 머신은 OS 위에 또 하나의 OS를 띄우는 것과 같으므로 꽤나 무겁다. 그러므로 프로젝트 마다 다른 환경을 위해 가상머신을 사용한다면 성능을 기대하기 어렵다. 가상 머신을 사용함으로 더 편리한 기능들이 있을 수 있지만 사용하지도 않는 기능들도 디폴트로 설치되므로 저장 공간 또한 불필요하게 낭비가 된다. 그리고 새로운 서버를 만들 때마다 혹은 팀에 새로운 팀원이 들어와 환경 설정을 할 때 계속해서 가상 머신을 설치해야 한다.

이에 반해 컨테이너는 자체 OS에 내장된 기능을 사용한다. 그러므로 비교적 가볍고 내장된 기능을 사용하니 속도도 빠르다. 컨테이너 안에 해당 프로젝트가 사용하는 언어나 프레임워크 등의 버전 등 모든 것이 세팅된 상태이다. 내 로컬 환경에서 서로 다른 버전의 노드를 사용하는 여러 프로젝트가 있다고 하더라도 컨테이너 속에 설정 값이 내장되어 있으므로 내가 따로 실행 전에 버전을 신경 쓸 필요가 없다.

강의를 어렵지 않은 말로 설명해주셔서 이해하기 쉬웠다. 어제는 설치하는 것 까지 마무리했다.

해당 강의에서는 windows 10 home의 경우 따로 설정(Hyper-V 설치 등)이 필요했는데, 현재 22년 4월 29일 기준으로 윈도우 10 홈도 WSL2 기반 Docker Desktop을 사용하는 것이 가능하다.

0개의 댓글