Docker - (1) : 개념과 핵심

­이승환·2021년 12월 1일
0

Docker

목록 보기
1/4

도커 소개


도커란 Go로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼이다
위 말은 많은 블로그에서 소개하는 도커를 대표하는 문장이지만 쉽게 와닿지 않는다. 따라서 개인적으로 정리하면서 동시에 이해하고자 포스팅하려고 한다.

가상화 사용 이유

컴퓨터는 매년 발전하고 있다. 이런 컴퓨터를 더욱 효율적이고 효과적으로 사용하기 위해 많은 가상화 기술들이 등장하였다. 서버 관리자 입장에서, CPU 사용률이 30퍼센트도 안되는 활용도가 낮은 서비스를 위해 PC를 구입하거나 클라우드 서비스를 이용하는 것은 리소스 낭비와 같다. 그렇다고 모든 서비스를 한 대의 컴퓨터에서 사용한다면 안정성에 문제가 생길 수 있다. 그래서 안정성을 높이면서 동시에 리소스 최대 사용 이라는 목표를 이루고자 서버 가상화를 사용한다.
대표적으로는 VM 이 존재한다.

컨테이너란?

컨테이너는 가상화 기술 중 하나로 대표적으로 LXC가 존재한다. 기존 OS 를 가상화해서 호스트에 얹는 방식이 아닌 컨테이너는 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식으로 이루어져있다. 쉽게 비교하자면 게스트 OS를 또 얹어서 컴퓨터 내부에 다른 컴퓨터(가상) 을 생성하는 것이 아닌 자원을 나눌 수 있는 방만 나눈다(OS는 분리하지 않음) 라고 이해하면 좋다.

기존에 우리가 사용하던 VM 의 경우에는 위 그림에서 좌측에 해당한다. Hypervisor 엔진 그리고 그 위에 Guest OS를 올려서 사용한다. 가상화된 하드웨어 위에 OS가 올라가는 형태이며, 거의 완벽하게 호스트와 분리된다고 이해해도 좋다.
반면에 컨테이너 기반 가상화는 Docker 엔진 위에 Application 실행에 필요한 바이너리만 올라가게 된다. OS 가상화를 보면 Host OS 와 완전히 분리되는 장점은 있지만 무겁고 느릴 수 밖에 없다. 하지만 컨테이너 기반 가상화는 호스트의 커널을 공유하고 도커 엔진이 자원을 격리해서 사용하게 만들어준다.

그렇다고 가상화 기술을 나쁘다고 해석해서는 안 된다. 오히려 보안적인 측면에서는 가상화가 좋을 수 있으면서 다양한 OS를 사용할 수 있다는 것이 장점이 될 수 있겠다. 하지만 도커는 효율적인 리소스를 활용하는 측면에서 성능이 좋고, 이식성도 높으며, 쉽게 Scale-out 할 수 있다는게 특징이다.

도커 이미지

Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것이다. 위 그림에서 같이 이미지라는 것 안에 여러 정보들이 포함되어 있고, 해당 이미지를 컨테이너에서 실행시키면 우리가 원하는 환경에 격리된 자원 안에서 프로세스를 실행시킬 수 있다.

도커를 공부해보면 레이어라는 이름이 종종 등장한다. 위 그림을 보고 간략하게 이해해보자. nginx(주황색) 라는 이미지를 만들다고 했을때, 가장 좌측에 있는 ubuntu라는 그림에서 NGINX라는 레이어만 추가되어있다. 따라서 ubuntu 이미지를 베이스로 한 개의 레이어만 추가해서 사용한다. 이렇게 이미지를 추가할 때, 베이스 이미지에 추가되는 내용만 얹어지고 새로운 이미지가 탄생하게 된다.

DockerFile

Docker Image 들을 저장하고 배포하는 Docker hub 는 깃허브 만큼 훌륭하게 구성되어 있다. 이미 여러 회사들은 자신들의 환경 이미지들을 공개하고 있고, 그저 우리는 가져와서 활용하기만 하면 된다. 하지만 배포판이 없거나(?) 혹은 프로젝트에서 사용하는 특별 환경을 미리 구성해놓고, 배포시에 이미지만 가져올 수 있다면 훨씬 더 좋을 것이다. 이럴때 DockerFile 을 사용한다!!

위와 같이 칙칙한 영어로 주저리주저리 써있는 파일들을 도커파일이라고 하고, 우리는 도커 명령어를 통해 이 파일을 빌드해주기만 하면 환경 세팅 및 컨테이너 생성을 한번에 할 수 있다. 자세한 내용은 다음 포스팅에서 정리할 계획이다.

Docker Hub && Docker Registry

간단하게 얘기해서 도커허브는 이미지를 저장하고 관리해주는 서버이다. 도커 레지스트리는 비공개적으로, 혹은 팀원들과 공유하거나 사내에서 활용할 수 있는 도커 이미지 저장소라고 생각하면 된다. 이 부분에 경우 다다음 포스팅에서 자세하게 정리할 계획이다.

Docker Architecture

이번 포스팅에서 정리한 내용들을 도커 아키텍쳐로 설명하면 위 그림과 같다.
사용자는 그저 커맨트라인에서 도커데몬을 설치하고, 호스트 컴퓨터에서 도커 엔진을 통해서 이미지를 이용해 컨테이너를 생성해서 배포하거나 특정 환경을 구축할 수 있다. 이러한 이미지는 도커 허브 또는 비공개적인 도커 레지스트리 서버를 활용해서 팀원들과 공유하거나 오픈소스 형태로 사용할 수 있다!! 다음 포스팅 부터는 도커엔진에 대해서 정리하겠다.

profile
Mechanical & Computer Science

0개의 댓글