도커? 컨테이너? 그게 뭔데?

J·2022년 7월 10일
0

여러분들은 분명 서점에서 책을 찾거나 인프런,유데미,유튜브 등등.. 에서 강좌를 찾던 도중
한번쯤음 '도커' 라는 용어를 스쳐가면서라도 본 기억이 있을 것이다.
물론 필자도 그러한 경험이 있기에 궁금증이 생겨, 해당 용어에 대한 개념을 정리해 보았다.

먼저 해당 개념을 이해하기 위해서는 아래와 같은 용어들을 알고 나면 훨씬 쉬울 것이다.

용어
컨테이너앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술
컨테이너 런타임컨테이너를 다루는 도구
도커컨테이너를 다루는 대표적인 도구

1. 컨테이너 🚢⚓

통상적으로 컨테이너라고 하면 해운업계에서 사용한다 알고있을 것이다. 표준화된 컨테이너 박스를 만들어서 내부에 물건을 탑재하고 표준화된 운송선만 있으면 효율적으로 운송할 수 있는 솔루션이다.

이 컨셉을 그대로 IT 분야에 적용한 것이 오늘 다룰 컨테이너의 개념이다.
즉, 선박에서 사용하는 컨테이너와 같이 소프트웨어 컨테이너도 다양한 프로그램, 실행 환경 등을 컨테이너로 추상화 할 수 있을 뿐 아니라 프로그램의 배포 및 관리를 단순하게 해주는 기능을 하고 있다. 패키징운송을 편하게 도와준다는 것이 바로 둘의 공통점이다.

컨테이너를 이해하기 위해서는 일단 가상화라는 개념을 알고 있어야 한다. 가상화는 컴퓨터 리소스의 추상화를 일컫는 말이다. 쉽게 말해서 애플리케이션, 서버, 저장장치 등 물리적으로 하나인 것을 복수의 것처럼 또는 반대로 복수의 것을 하나인 것처럼 만들어 주는 기술이다.

가상화를 통해서 가상머신(VM)을 만들어 낼 수 있으며, 컨테이너는 가상머신과 마찬가지로 애플리케이션을 관련 라이브러리 및 모든 종속항목과 패키지(그냥 APP에 필요한 모든 파일, 설치파일들, 필요한 모든 것들)로 묶어 소프트웨어 서비스 구동을 위한 격리환경을 마련해 주지만 큰 차이점이 있다.
(가장 큰 차이는 VM은 일단 훠어어얼씬 무겁다.)

출처 : https://www.redhat.com/ko/topics/containers/containers-vs-vms

VM(좌)컨테이너(우) 그림을 한번 살펴보자. HOST OS는 여러분의 PC를 의미하며 그 위에서 HYPERVISOR(가상머신)을 통해 임의의 GUEST OS를 만들어 APP을 구동 시키는 것이 가상머신의 개념이다. VMHYPERVISOR를 거쳐야 하기 때문에 필연적으로 속도가 저하될 수 밖에 없다.
반대로, 컨테이너는 별도의 하드웨어 에뮬레이션 없이 리눅스 커널을 공유하여 컨테이너를 실행하며
Guest OS가 존재하지 않는다. 이런 가상화를 '운영체제 수준의 가상화'라고 부른다.




2. DOCKER 🐳🐋

출처 : 도커로고

이 멍청하게 생긴 고래가 바로 '도커' 이다.
도커의 정의를 한번 보자면

'도커(docker)는 리눅스의 응용프로그램들을 소프트웨어 컨테이너(Container) 안에 배치시키는 일을 자동화하는 오픈소스 프로젝트이다.'

그렇다, 이를 이해하기 위해서 앞에서 컨테이너에 대해서 그렇게 장황하게 설명할 수 밖에 없었다.
도커는 컨테이너를 기반으로 하는 가상화 플랫폼이다. 앞서 언급한 컨테이너를 이용해 소프트웨어를 표준화된 유닛으로 알아서 패키징을 해주고, 환경에 구애받지 않으며, 애플리케이션을 신속하게 배포 및 확장할 수 있다. 한마디로 컨테이너들을 쉽게 관리하고, 신속하게 배포 및 확장 할 수 있게 해주는 것이다.

도커에는 도커 이미지(Docker Image) 라는 중요한 개념이 있다. 이미지는 간단히 말해 컨테이너를 생성하기 위해 필요한 설계도를 의미한다. 도커는 이미지를 보고 컨테이너를 생성하게 된다. 도커가 빌드한 이미지를 실행하면 비로소 컨테이너가 나오게 되는 것이다.

도커 이미지는 도커 파일(Docker File) 로 만들 수 있는데, 도커 파일은 도커가 이미지를 생성하기 전에 어떻게 이미지를 만들지 이해할 수 있게 적어 놓은 파일이다. 이렇게 생성한 이미지를 저장해 놓을 수 있는 공간도 있는데, 이것을 도커 허브(Docker Hub) 라고 한다. 허브를 이용해 이미지를 공유할 수 있고, 어디서든 다운로드 할 수 있게 된다.

출처 : https://kbseo.tistory.com/7

위와 같이 도커 파일을 통해 이미지를 생성하여 도커 허브에 저장하고, 각 서버에서는 컨테이너를 생성해 서비스를 시작할 수 있게 된다.

3. WHY?🙄

그렇다면 왜 도대체 도커가 얼마나 좋길래 다들 도커도커 하면서 쓰려는 것일까?
Docker는 environment disparity 라는 문제점을 해결해준다. environment disparity는 또 뭔가 싶을텐데 예를 들면, 여러분의 PC는 윈도우이지만 서버는 리눅스를 사용중이다. 이런 문제점을 우리의 도커씨가 해결해준다. 도커는 다른 머신에서도 같은 환경을 구현할 수 있기 때문이다.🐳
또한, 도커의 컨테이너들은 독립적으로 존재할 수 있기 때문에 각기 다른 많은 수의 컨테이너를 가질 수 있다. Python, Django, Java, Node.js 등등의 컨테이너들을 말이다. 즉 도커 덕분에 매번 새로운 서비스를 만들때마다 새로운 서버를 사고, 설정할 필요가 없다는 것이다. 그렇기 때문에 사람들이 도커를 사랑할 수 밖에 없는 이유인 것이다.


지금까지 도커에 대해 기본적인 개념을 알아봤으며, 반박 시 선생님들 말이 다 맞습니다.
다음 번에는 이와 관련된 쿠버네티스 혹은 데브옵스의 개념에 대해서도 다뤄볼 예정이다.

profile
생각 끄적이는 공간

0개의 댓글