들어가며

지난 시간에는 도커와 컨테이너의 정의 그리고 가상 머신과 비교한 장점에 대해서 알아보았다. 이번에는 도커가 어떻게 컨테이너를 만들고 관리하는 아키텍처에 대해서 알아보도록 하겠다.

도커 아키텍쳐

도커는 기본적으로 clinet - server로 나누어져 있다. 클라이언트에서 docker 커맨드를 사용하면 도커 서버는 REST API형식으로 명령을 전달받아 수행하게 된다. 이 때문에 원격으로 도커 서버에 명령을 전달하거나 여러 개의 도커 서버에 접근 할 수 있으며 하나의 서버 또한 여러개의 클라이언트에서 명령을 받을 수 있다. 이다음은 내부 구조에 대해서 하나씩 알아보도록 하겠다.

https://docs.docker.com/get-started/overview/#docker-architecture

Docker daemon(dockerd)

도커 데몬은 클라이언트의 명령을 REST API로 받아 컨테이너, 이미지, 네트워크 그리고 볼륨을 관리한다. (여기서 볼륨은 컨테이너에서 생성된 데이터들을 의미한다)

Docker client

위에서 언급했든 dockerd에 명령을 전달하기 위한 수단이다. docker명령어를 사용하면 Docker API가 REST API형식으로 dockerd의 소켓에 전달된다.

Images

도커 컨테이너를 만들기 위한 읽기 전용 템플릿이다. 이미지는 직접 제작, Registry에서 다운로드 그리고 기존 이미지를 확장하여 사용할 수 있다. 이미지는 이미지를 만들기 위한 커맨드가 집합된 Dockerfile을 통해서 만들어질 수 있으며 이미지는 레이어 단위로 만들어지게 되는데 만약 Dockerfile에 어떤 부분을 수정했다면 해당 부분의 레이어만 교체하므로 Rebuilding이 가볍게 되어 있는 구조이다. 

Container

컨테이너는 이미지의 instance이며 독립적으로 프로세스를 실행할 수 있는 공간이다. 역으로 컨테이너의 상태를 이미지로 저장하여 사용할 수 있다. 참고로 독립성은 기존에 있던 LUX의 namespace를 이용하여 제공한다. 

 

마치며

기본적인 아키텍처에 대해서 알아보았다. 이후에는 실제로 커맨드를 통해서 도커를 실습하여 익혀보자

'Docker' 카테고리의 다른 글

[Docker] - 도커 이미지 빌드(Dockerfile)  (0) 2021.02.18
[Docker] - Docker란 무엇인가?  (0) 2021.02.14

들어가며

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

 

 

도커의 정의

도커란 컨테이너를 기반으로하는 가상화 플랫폼이자 이를 운영하는 회사명이다. 가상화 플랫폼이라는 말은 기존의 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