도커에 대해서 공부한 내용을 정리하려고 합니다. 본 내용은 처음 도커를 공부하시거나 왜 도커를 배워야하는지에 대해 의문점이 있으시다면 한번 보시면 좋을 것 같습니다. 잘못된 내용이나 궁금하신 점은 댓글로 작성해주시면 감사드립니다.
도커란?
도커(Docker)
는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트입니다. Go 언어
로 작성돼 있으며, 기존에 쓰이던 가상화 방법인 가상머신과 달리 도커 컨테이너는 성능의 손실이 거의 없어 차세대 클라우드 인프라 솔루션으로서 많은 개발자에게 주목받고 있습니다.
1
2
3
4
5
- Docker Compose
- Private Registry
- Docker Machine
- Kitematic
- 등등
가상 머신과 도커 컨테이너
그림 : 도커 컨테이너와 가상 머신의 구조
기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었습니다. 여러 개의 운영체제는 가상 머신이라는 단위로 구별되고, 각 가상머신에는 우분투(ubuntu), CentOS 등의 운영체제가 설치되어 사용됩니다. 이러한 각 게스트 운영체제는 다른 게스트 운영체제와 완전히 독립된 공간에 시스템 자원을 할당받아 사용합니다. 이때 가상화 방식을 사용할 수 있는 대표적인 가상화 툴로 VirtualBox, VMware 등이 있습니다.
도커 컨테이너
는 가상화된 공간을 생성하기 위해 리눅스의 자체 기능인 chroot, 네임스페이스(namespace), cgroup을 사용해 프로세스 단위의 격리 환경을 만들어 성능손실이 거의 없습니다. 또한 컨테이너 안에는 애플리케이션을 구동하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 이미지의 용량 또한 가상 머신에 비해 대폭 줄어듭니다.
따라서 컨테이너를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다는 장점이 있습니다.
도커 왜 시작해야 할까
컨테이너는 OpenVZ, LXC, cri-o 등 몇 가지가 존재하지만, 그 중에서도 도커
는 컨테이너 생태계에서 사실상 표준으로 많이 사용되고 있습니다. 따라서 많은 회사들이 서비스 개발 및 운영 환경에 도커 컨테이너를 도입하고 있습니다. 왜 많은 회사, 프로젝트들이 도커를 선택하고 시작했을까요?
- 애플리케이션의 개발과 배포가 편해집니다.
- 여러 애플리케이션의 독립성과 확장성이 높아집니다.
도커 엔진의 종류 및 버전
2017년 이전의 도커 엔진은 1.12와 같이 1.x 버전으로 표기되었습니다. 그러나 1.13을 마지막으로, 2017년 3월 부터 도커 EE(Docker Enterprise Edition)
와 도커 CE(Community Edition)
으로 구분되어 제공되고 있으며 17.03-EE 또는 17.03-CE와 같이 (출시년도)-(출시 월)-(도커 엔진 종류)의 형태로 변경되었습니다.
도커 EE
는 유료로 제공되는 기업용 솔류션이며, 각종 기술 지원 및 실제 서비스 단계에서 필요한 각종 부가 기능들을 도커 엔진과 함께 제공합니다. 도커 CE
는 무료로 제공되는 도커 엔진으로서, 별도의 기술 지원 및 서비스를 제공하지는 않지만 도커 엔진 자체의 핵심적인 기능을 무료로 사용할 수 있다는 장점이 있습니다.
참고내용
도커의 기능을 완전하게 사용하려면 리눅스에서 사용하는 것이 가장 바람직하지만 윈도우와 MacOS 에서도 간단한 테스트나 개발 용도로 사용할 수 있습니다. 그러나 리눅스를 사용할 수 있는 환경이라면 리눅스
를 사용하는 것이 좋습니다.