Docker 알아보기
Docker에 대해 알아보고 정리한 내용입니다.
1. Docker의 등장
DevOps 프로세스의 등장으로 개발과 배포의 주기가 짧아지고 MSA(Micro Service Architecture)가 유행하면서 애플리케이션은 세분화되어 관리해야할 서버 개수가 많아지면서 복잡도가 높아졌습니다. 이러한 상황에 컨테이너 기반의 도커가 등장하였습니다.
도커를 정의하면 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 애플리케이션이나 Runtime 환경 등을 컨테이너로 추상화하여 배포하고 관리해줍니다. 어떠한 프로그램이든 추상화하는 것에 제약이 없고 다양한 환경에 적용이 가능합니다.
1.1. 기존 가상화 방식과 도커의 차이
- Virtual Machine
VMWare, VIrtualBox와 같은 가상 머신을 이용하여 Host OS 위에 Guest OS를 가상화하여 사용.
하드웨어 자원의 관리를 위해 Hypervisor를 사용.
사용법이 간단하지만 Guest OS 설치를 위해서는 이미지가 필요.
이러한 이유로 무겁고 느려져서 배포, 관리에 어려움이 있기 때문에 운영 환경에서 사용하기에 맞지 않음.
문제를 개선하기 위해 KVM(Kernal-based Virtual Machine)과 반가상화(Paravirtualization) 방식이 등장.
KVM과 반가상화도 호스트형 가상화 방식에 비해 성능이 향상되었으나 여전히 성능 문제가 발생. - Docker
VM의 성능 문제를 개선하기 위해 프로세스를 격리하는 방식의 도커가 등장.
이러한 방식을 컨테이너 방식이라고 하며 Docker Engine은 LXC(LinuX Container)를 이용하여 가상화 환경을 제공.
Guest OS를 설치하지 않고 프로그램이나 라이브러리만 격리해서 설치.
Host OS와 하드웨어 자원을 공유하여 프로세스가 필요한 만큼만 사용.
하드웨어를 관리하는 Hypervisor가 없기 때문에 VM에 비해 성능이 개선됨.
2. Container
Container는 격리된 공간에서 프로세스가 동작하는 방식을 의미합니다. 또한 다양한 애플리케이션이나 Runtime 환경 등을 추상화한 것입니다. 앞서 알아본 것처럼 기존 가상화 방식의 성능 문제를 개선하기 위해 만들어진 기술이며 가볍고 빠르게 동작합니다.
서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행됩니다. 실행중인 컨테이너에 접속하여 다수의 프로세스를 실행하거나 자원 등을 관리하여 사용할 수 있습니다.
3. Image
Image는 컨테이너 실행에 필요한 파일과 설정 등을 포함하고 있는 것을 의미합니다. 즉, 이미지는 컨테이너 실행에 필요한 모든 정보를 포함하고 있으며, 컨테이너는 이미지를 실행한 상태라고 볼 수 있습니다.
이미지는 다양한 환경에 맞춰서 여러개의 서버를 생성하려는 경우에 사용합니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 변하거나 삭제되어도 이미지는 변경되지 않습니다. 이렇게 만들어둔 이미지는 일반적으로 Docker Hub나 별도의 Registry에 업로드(push), 다운로드(pull)하여 사용합니다.
3.1 Dockerfile
Docker는 이미지 생성을 위해서 Dockerfile이라는 파일에 이미지 생성 과정을 명시합니다. 도커 이미지를 만드는 docker build를 수행하면 Dockerfile 내부의 생성 과정에 따라 이미지가 빌드되도록 도커에 지시를 내립니다.
4. Layer
Layer는 여러개의 파일 시스템을 하나로 사용할 수 있도록 지원하는 방식입니다. 보통 도커 이미지는 컨테이너 실행에 필요한 모든 정보를 포함하고 있기 때문에 용량이 매우 큰데, 이러한 이미지를 계속해서 내려받을 경우에 발생하는 비효율적인 면을 개선하기 위한 방식입니다.
이미지는 여러개의 read-only 레이어로 구성되어 있고 파일이 추가되거나 변경되면 새로운 레이어가 생성되는 구조입니다. 컨테이너 생성에도 이미지와 마찬가지로 레이어 방식이 사용됩니다.
이상으로 Docker의 기본적인 내용에 대해 알아봤습니다.
※ Reference
- subicura.com, 초보자를 위한 도커안내서 - 도커란 무엇인가?, https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
- real-dongsoo7.tistory.com, 서버 가상화? Docker?, https://real-dongsoo7.tistory.com/60
- pyrasis.com, 가장 빨리 만나는 Docker 1장 - 1. 가상 머신과 Docker , http://pyrasis.com/book/DockerForTheReallyImpatient/Chapter01/01
- www.44bits.io, 도커 컨테이너는 가상머신인가요? 프로세스인가요?, https://www.44bits.io/ko/post/is-docker-container-a-virtual-machine-or-a-process