들어가며

최근 해커톤을 진행하면서 도커 형식으로 주최 측에서 개발환경을 제공해주었다. 도커에 대해서는 어렴풋이 들어봤지만 실제로 개발에 활용하면서 탁월한 유용성을 체감했다. 좀 더 잘 활용하기 위해 세세한 기초부터 도커에 대해 알아보자.

 

 

도커의 정의

도커란 컨테이너를 기반으로하는 가상화 플랫폼이자 이를 운영하는 회사명이다. 가상화 플랫폼이라는 말은 기존의 Virtual Machine처럼 일종의 가상 머신을 만들어 운영하는 것을 의미한다. 그렇다면 컨테이너는 무엇일까?

 

컨테이너

컨테이너는 코드와 코드 실행에 필요한 종속성들을 패키지로 만든 소프트웨어 단위이다. 그래서 기존의 애플리케이션을 다른 환경으로 빠르게 옮겨 실행시킬 수 있다고 한다. 기존에는 어떤 애플리케이션을 작성하고 이를 다른 컴퓨터에 옮기려고 하면 기초 설정들을 다시 세팅해야 했다. 예를 들어 pytorch를 사용한 인공지능 모델 학습을 다른 서버로 이전해야 한다고 하자. 그러면 pytorch를 설치하는 건 기본이고 파이썬, conda 등 여러 가지를 다른 서버에 설치한 다음에 애플리케이션을 실행시킬 수 있다. 이러한 세팅을 프로비저닝(provisioning)이라고 한다. 

 

즉 컨테이너는 기기의 인프라에 관계없이 어플리케이션을 실행시킬 수 있도록 하여 프로비저닝을 해소할 수 있는 소프트웨어이다. 

 

컨테이너 vs 가상머신 

 

얼핏 들어보면 가상머신과 별다른 게 없다고 생각할 수 있다. 가상 머신 또한 OS를 포함해서 통째로 개발환경을 옮길 수 있기 때문이다. 도커 홈페이지에서는 이와 관련해서도 자세히 설명이 되어있다. 영어로 되어있으므로 간단하게 한글로 인용하겠다.

https://www.docker.com/resources/what-container

가상 머신

가상 머신은 하이퍼바이저를 통해서 물리적 하드웨어 단위로 추상화하여 하나의 서버에 여러 개의 서버를 실행시키는 것처럼 할 수 있다. 가상 머신은 OS부터 기초적인 바이너리 파일과 라이브러리까지 포함하므로 이는 몇십 기가바이트 정도로 많은 용량을 차지하며 초기 부팅이 느리다는 단점이 있다.

 

컨테이너

컨테이너는 코드와 이에 필요한 종속성들만 포함하여 애플리케이션 단위로 가상화를 하여 하나의 OS 커널을 공유한다. 각각의 컨테이너는 독립적인 유저 프로세스이며 몇십 메가바이트 정도의 매우 작은 용량이 필요하므로 공유하는데 용이하다. 그리고 가상 머신에 비해서 빠른 속도를 가지고 있다.

 

 

마치며

기본적인 도커의 정의에 대해서 알아보았다 다음에는 개발자로서 도커의 아키텍처에 대해서 알아보도록 하자

 

'Docker' 카테고리의 다른 글

[Docker] - 도커 이미지 빌드(Dockerfile)  (0) 2021.02.18
[Docker] - Docker Architecture(도커의 구조)  (0) 2021.02.14

+ Recent posts