Docker 1. What is Docker?

jiffydev·2020년 11월 25일
0

서문

이번에 기업협업을 하게 된 회사가 도커 컨테이너를 관리하는 kubernetes를 모니터링하는 프로메테우스와 관련된 솔루션(??????) 회사라 도커에 대해 수박 겉핥기 식이나마 공부를 하게 되었다. 도커가 세상에 배포된지는 7년 정도밖에 안됐지만, 요즘 기업들 중 도커 안쓰는 곳을 찾기가 힘들 정도로 개발자들 사이에서는 대중화가 되었다.

이렇듯 너도나도 쓰는 기술이지만 필자와 같이 초보 단계인 사람들에게는 사전에 알아야 할 개념도 많고, 들어도 이해가 안되는 부분이 많을 것이다. 이 글을 쓰면서도 틀리는 부분이 분명 나올 것이라는 확신이 있지만 최대한 이해하기 쉽게 정리해보고자 한다.

1. 가상화


도커는 컨테이너 기반의 가상화 플랫폼이다. 우선 가상화에는 OS를 가상화하는 것과 컨테이너를 가상화하는 방법이 있다. 컨테이너가 무엇인지에 대해서는 후술하도록 하고, 위 그림에서 볼 수 있듯 OS 가상화는 Hypervisor라는 관리자를 두고 각 가상머신(Virtual Machine) 안에 별도의 OS가 돌아간다. 두 개의 OS가 있다는 것은, 우리가 일반적으로 컴퓨터를 켰을 때 발생하는 부팅과정이 두 번 발생한다는 것이고, 이는 필연적으로 무겁고 느릴 수밖에 없다.

그래서 사람들이 생각한 것이 컨테이너를 통한 가상화이다. 컨테이너는 Host의 OS를 따라가면서 프로세스를 격리하는 방식을 취하는데, 이로 인해 컨테이너는 부팅으로 인한 커널 실행이 필요 없고 따라서 가볍고 빠르게 동작한다.

그러면 도커가 처음으로 컨테이너 기반의 가상화를 만들었냐 하면 그렇지 않다. 컨테이너 기반의 가상화는 이미 그 전부터 있던 기술이고 여러 오픈소스들이 존재한다. 도커가 기존의 컨테이너 기반 가상화 도구(LXC 등)과 다른 점은 LXC 는 다중 프로세스를 관리할 수 있는 init 시스템을 사용하며, 전체 애플리케이션을 하나로 실행할 수 있다. 도커는 애플리케이션이 개별 프로세스로 세분화되도록 하며 이를 수행할 수 있도록 제공한다는 점이다.

2. 컨테이너

컨테이너 기반의 가상화 플랫폼이라고 실컷 가상화에 대해 떠들었는데, 그렇다면 컨테이너란 무엇일까?

컨테이너는 결국 위 이미지처럼 하나하나가 격리된 별개의 환경을 뜻한다. 그 환경 안에 애플리케이션과 그에 종속된 라이브러리 등을 하나로 묶어 배포할 수 있게 된다. 그렇기 때문에 OS나 서버 종류에 상관 없이 구동되므로 개발, 배포가 쉬워졌다.

3. 이미지


Docker Image는 컨테이너를 실행하기 위한 파일, 설정값을 기술한 명세서로, 변하지 않는(Immutable) 상태를 가지고 있다. 또한 그림과 같이 적층형 이미지를 사용함으로써 데이터가 중복되지 않도록 하기 때문에 저장소를 효율적으로 관리하고 네트워크 코스트를 줄일 수 있다.

profile
잘 & 열심히 살고싶은 개발자

0개의 댓글