최근 IT 업계에서 가장 화제이면서 빠르게 보급되고 있는 기술을 이야기하면 Docker(이하 도커)를 뺄 수 없을 것입니다.
이번 시간에는 이 도커에 대해 살펴보겠습니다.
Docker의 정의
도커는 애플리케이션을 개발, 배포, 실행할 수 있는 오픈 플랫폼입니다. 컨테이너형 가상화 기술을 사용하여 애플리케이션을 빠르고 안정적으로 실행할 수 있도록 코드와 모든 종속성을 패키징하는 플랫폼입니다.
이를 조금 더 쉽게 설명하자면, 애플리케이션 실행에 필요한 모든 프로그램과 설정(운영체제, 자바, 데이터베이스 등)이 포함된 이미지를 생성해 다양한 환경에서 쉽게 실행하고 운용할 수 있는 소프트웨어입니다.
도커의 대표적인 특징은 다음과 같습니다.
- 확장성과 이식성
- 운영 체제에 도커가 설치되어 있다면 운영 체제의 종류에 상관없이 애플리케이션을 생성하고 운용할 수 있습니다.
- 시스템을 구성하는 과정을 명령어가 아닌 표준화 된 형태로 작성하여 시스템을 구성함으로써 운영체제의 특성이나 사전 지식에 구애받지 않고 시스템을 손쉽게 구성할 수 있습니다.
- 자원 관리의 용이성
- 운영체제를 가상화하지 않아 가상머신을 통한 애플리케이션 배포 및 운용보다 적은 리소스를 사용합니다.
- 간편한 설정 관리
- 환경 변수로 특정 설정 값을 변경할 수 있어 배포 환경에 따라 설정을 손쉽게 변경하고 운용할 수 있습니다.
Docker의 도입 배경과 필요성
도커가 등장하기 이전에는 애플리케이션 배포와 운용에서 주로 가상 머신(Virtual Machine, 이하 VM) 기술이 활용되었습니다.
VM은 물리적인 컴퓨터에 직접 하이퍼바이저 소프트웨어를 설치하거나 호스트 운영 체제(윈도우 등 사용자의 컴퓨터에 설치되어 있는 운영 체제)에 프로그램을 설치하여 하나의 컴퓨터에서 여러 개의 독립된 운영 체제를 실행할 수 있는 환경을 제공합니다. 이를 통해 각 운영 체제에 필요한 프로그램들을 개별적으로 설치하여 애플리케이션을 배포하고 운용했습니다.
하지만 이러한 가상화 기술에도 중요한 한계가 있었습니다. 각 VM별로 독립된 운영 체제를 설치해야 하므로, VM을 유지하고 실행하는 데 상당한 리소스가 소모됩니다. 즉, 애플리케이션이 구동이 아닌 운영체제 유지에 불필요한 자원 낭비가 발생하는 것을 뜻합니다.
이를 극복하기 위해 컨테이너 기반 가상화 기술이 등장하게 되었고, 2013년에 공개되면서 컨테이너 기반 가상화 기술을 보편화 시킨 프로그램이 도커입니다.
Docker의 기본 구조 및 흐름
도커는 크게 3단계의 구조로 이루어져 있습니다.
- Client (클라이언트)
- 도커를 관리하는 사용자입니다.
- 클라이언트는 도커 명령어를 통하여 도커 호스트에게 요청을 보내고(Client > Docker Host), 응답을 받습니다. (Docker Host > Client)
- Docker Host (도커 호스트)
- 도커 엔진이 설치된 하드웨어 혹은 가상머신입니다.
- 도커 데몬을 이용하여 컨테이너를 관리합니다.
- 클라이언트가 이미지 업로드를 요청하면, 도커 호스트는 해당 이미지를 레지스트리에 업로드합니다. (Docker Host -> Registry)
- Registry (레지스트리)
- 도커 이미지를 저장하고 관리하는 중앙 집중식 저장소입니다.
- ‘docker pull’ 혹은 ‘docker run’ 명령어를 이용하여 레지스트리에서 이미지를 불러올 수 있습니다.
- ‘docker push’ 명령어를 이용하면 레지스트리에 이미지를 저장할 수 있습니다.
Docker Image
Docker Image(이하 도커 이미지)는 도커 컨테이너를 생성하는 데 사용되는 이미지입니다.
이를 조금 더 쉽게 풀이하자면, 서비스 운영에 필요한 필수 프로그램, 소스 코드 등 애플리케이션 실행에 필요한 독립적인 환경을 포함한 템플릿 파일입니다.
도커 이미지는 다음과 같은 특징을 가지고 있습니다.
- 이미지는 내용 변경이 불가능합니다.
- 하나의 이미지로 여러 개의 컨테이너 생성이 가능합니다.
- Dockerfile이라는 파일로 이미지를 생성할 수 있습니다. 새로운 이미지를 생성하거나 기존 이미지의 내용을 수정해야 하는 경우, Dockerfile을 생성 혹은 수정하여 이미지를 생성합니다.
- 생성된 이미지 파일은 도커 레지스트리에 업로드하여 컨테이너 배포 및 운용에 사용합니다. 네이버 클라우드 플랫폼 내 ‘Container Registry’처럼 별도로 제공하는 서비스 혹은 도커에서 제공하는 Dockerhub에 이미지 업로드가 가능합니다.
Docker Container
Docker Container(이하 도커 컨테이너)는 도커 이미지를 이용하여 만든 실행 가능한 인스턴스입니다.
컨테이너는 호스트 시스템의 리소스를 공유하며 격리된 환경에서 실행됩니다. 이로 인하여 가상머신에 비해 적은 리소스 점유로 애플리케이션 실행이 가능합니다.
이상으로, 도커의 기본 개념과 구조에 대해 정리해보았습니다.
도커에 대해 궁금한 점이 있다면 언제든지 문의 해주시길 바랍니다.
감사합니다.