Docker

Docker 개념 이해

김모우 2023. 3. 1. 11:29
728x90
반응형

Docker란 무엇인가??

Docker, Kubernetes 많이 들어본 단어이지만, 확실하게 개념에 대한 설명을 물어보면 애매 모호한 답이 돌아오는 경우가 많다. 관련 내역을 공부 중에 알기 쉽게 개념을 정리해논 내용이 있어서 내용을 정리한다.

Docker란 "데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어" 라고 정의한다.

 

위 기능은 주로 서버에 사용 되며, 서버는 또 2가지 개념으로 나뉘어진다. 물리적인 서버와 기능적인 의미의 서버로 나뉘어지며, 여기서 물리적인 서버는 모두가 다 아시는 내용처럼 물리적 컴퓨터로서의 서버를 의미하며, 기능적인 의미의 서버는 DB 서버, Web 서버처럼 특정 기능을 제공하는 것을 의미한다. Docker는 위의 특정 기능을 제공하는 서버를 하나의 물리적인 공간에 격리시켜 운영하는 기능을 제공하는 소프트웨어이다.

 

 

Docker 구성

Docker가 동작하기 위해서는 크게 3가지의 아이템이 필요하다. Docker 엔진, 컨테이너, 이미지 위의 3가지가 조합되어서 위에서 얘기했던 기능적인 의미의 서버(컨테이너)가 구성이 된다.

  • Docker 엔진: 컨테이너를 생성하고 구동 시키기 위한 툴
  • 컨테이너: 기능적인 의미의 서버 = OS 비슷한 것 + Appliction Build 환경 + Application
  • 이미지: 컨테이너 설계도

 

Docker를 왜 쓰는가??

각 Application을 실행하는 데는 각각 Application에 맞는 실행 환경이 필요하다. 예를 드면, PHP 실행을 위해서는 PHP 실행에 필요한 패키지들이 필요하고, 파이썬 실행 시에도 필요한 패키지 및 코드 구성을 위한 라이브러리가 추가로 설치가 필요하다. Docker는 이에 필요한 환경을 사전에 이미지를 통해 정의하여 컨테이너 형태로 격리시켜 동작하게 된다.

 

시스템 A는 특정 프로그램 5.0과 호환되며 시스템 B는 특정 프로그램 8.0과 호환되는 Application을 운영하는 서버라고 했을 때 시스템 A, B의 운영환경 공유 시 특정 프로그램을 8.0으로 업데이트 시 시스템 A는 프로그램 공유에 따른 영향을 받게 된다. Docker는 컨테이너 형태로 이러한 운영환경을 분리함에 따라, 프로그램에 대한 격리 환경을 지원한다.

 

  • 시스템 A 컨테이너: 특정 프로그램 5.0 + Application
  • 시스템 B 컨테이너: 특정 프로그램 8.0 + Application

또한, Docker는 이미지를 통해 Application을 손 쉽게 컨테이너 형태로 확장해 나갈 수 있습니다. 예를 들어, 게임 사전 예약이나 쇼핑몰 이벤트처럼 사용자 트래픽이 순간적으로 몰리게되는 이벤트 성 활동을 진행할 때 Docker를 활용 시 사용자 트래픽을 모니터링하여 손쉽게 기 작성된 이미지로 컨테이너 형태로 Web 서버를 증설해 나갈 수 있으며, 해당 Web 서버를 LB 풀에 추가하여, 사용자 트래픽을 분산하여 안정적인 서비스를 제공할 수 있습니다. 이를 통해 서버를 빠르게 확장할 수 있으며, 이에 필요한 물리적인 서버의 수량도 축소할 수 있습니다. 

 

컨테이너는 이동이 자유롭습니다. 실제 컨테이너 자체가 옮겨 가지는 않지만, 컨테이너 정보를 내보낸 후에 손쉽게 다른 물리적인 공간에 컨테이너를 배포할 수 있습니다. 컨테이너의 특성에 따라 컨테이너의 물리적인 위치는 이동하였지만, 컨테이너에 개발이나 Application 실행에 필요한 환경이 빌드되어 있으므로, 시스템 환경에 영향 없이 물리적인 공간의 리소스만을 확인하여, 물리적인 이동이 가능합니다.  

 

Docker 동작 원리

Docker는 아래와 같은 환경에서 동작합니다.

물리 서버 + 서버 운영 체제(Linux) + 도커 엔진 + 컨테이너

물리 서버에는 실제 서버 운영 체제가 구성되어 있으며, 도커 엔진 아래에도 리눅스 운영 체제가 있습니다. 컨테이너도 리눅스 비슷한 운영 체제가 들어 있는 구조입니다. 컨테이너에서 리눅스 비슷한 운영 체제라고 명시하는 이유는 리눅스 OS 구성에 필요한 주변 부분 및 커널을 모두 포함하지는 않고, 리눅스 주변 부분만 들어 있는 상태에서 동작을 하게 됩니다. 

 

위의 구조에 따라 기본적으로 Docker는 리눅스 환경에서 동작하게 끔 구성이 되어 있으며, 윈도우즈, Mac OS에 Docker 구성 시 해당 OS 위에 리눅스 OS를 끌어들여 도커를 구성하게 됩니다.

 

  • 이미지 구성에는 2가지 방법이 있습니다.
    : 컨테이너를 만들기 위해 이미지를 사전 정의
    : 이미지를 통해 컨테이너를 배포하고, 컨테이너 상에서 필요한 내역을 수정 후 이미지로 빌드

  • 컨테이너 이동
    : 이미지로부터 컨테이너 만들기
    : 이미지 Export
    : Export 이미지를 가지고 다른 도커 엔진에 배포
728x90
반응형

'Docker' 카테고리의 다른 글

Docker - Container 전체 종료, 삭제  (0) 2022.07.29
Docker Installation  (0) 2020.10.25