티스토리 뷰

728x90
반응형

애플리케이션을 개발 및 테스트하는 환경과 실제 운용하는 서버에 배포 후 구동하는 환경에는 차이가 있습니다. 컴퓨터 하드웨어의 차이부터 시작하여, 애플리케이션 구동에 필요한 런타임 버전 또는 환경설정 변숫값이 개발하던 환경과 달라, 운영 서버에 애플리케이션을 배포한 후 장애에 가까운 문제가 발생하곤 합니다. 개발 및 테스트하는 환경과 실제 운영환경의 차이를 없애기 위하여, 도커라는 플랫폼을 많이 활용하고 있습니다. 도커라는 플랫폼은 어떻게 개발, 테스트하는 환경과 애플리케이션의 프로덕션 환경의 차이를 줄일 수 있을까요?

이번 포스팅에서는 도커의 정의, 그리고 도커에서 사용하는 용어와 아키텍처에 대해 알아보도록 하겠습니다.

Docker의 정의

도커는 애플리케이션을 개발, 배포, 실행하기 위한 플랫폼입니다. Docker 플랫폼 상에서 다양한 서버(DB, Web, WAS, Linux 애플리케이션 등)를 손쉽게 구동할 수 있습니다. 예를 들어, 카카오톡 프로그램을 다운로드하여 설치하면, 설치하는 과정에서 로컬 PC에 환경변수를 설정하고, 압축해제, 디렉터리 생성, 프로그램 자동시작 등록 등 사용자의 PC환경 설정을 변경합니다. Docker에서 실행하는 애플리케이션은 사용자의 PC환경 설정값을 변경하지 않고, 가상 환경에서 환경변수를 설정하고, 프로세스를 구동하고, 파일을 저장합니다. 그리고 도커에서 실행된 애플리케이션이 종료되어도, 로컬 PC환경엔 영향을 주지 않아, 가상 환경에서 자유롭게 애플리케이션 실행이 가능합니다. 즉, 도커는 가상화 기술을 기반으로 애플리케이션의 실행하는 플랫폼이라고 정의할 수 있습니다. 가상화 란, 컴퓨터의 리소스 (프로세스, 저장장치, RAM, 그래픽, 네트워크 등) 장치를 추상화하여, 다수의 장치처럼 사용하는 기술입니다. 1개의 하드웨어를 여러 개의 하드웨어가 존재하는 것처럼 추상화하여 사용한다는 것입니다.

Docker 아키텍처

도커 플랫폼은 어떻게 실행될까요? 아래 그림과 같이 도커는 클라이언트-서버 구조로 실행됩니다. 도커 서버와 클라이언트는 같은 시스템에서 실행될 수 있으며, 또한 서로 다른 시스템 환경에서도 실행 가능합니다. 도커 클라이언트와 서버 간 통신은 REST API, Unix Socker 등 다양한 네트워크 인터페이스로 통신 가능합니다. 도커 클라이언트가 도커 서버에게 설치, 빌드, 실행을 요청하면, 서버는 이를 실행합니다. 아키텍처는 복잡하지 않지만, 도커 데몬(Docker daemon), 컨테이너(Container), 레지스트리(Registry), 이미지(Image)와 같은 용어가 등장하여 이를 이해할 필요가 있습니다.

도커 아키텍처 (참조 : https://docs.docker.com/get-started/overview/)

Docker 용어

도커에서 사용되는 용어를 아래와 같이 간략하게 정의해볼 수 있습니다.

  • 도커 클라이언트(Docker Client) : 도커 데몬에게 도커 API로 빌드, 실행, 설치를 요청하는 프로세스, 다수의 도커 데몬과 통신함. 주로 "docker run" 명령어로 전송함.
  • 도커 데몬(Docker Daemon) : 도커 클라이언트로부터 받은 요청을 처리하며 이미지, 네트워크, 볼륨, 컨테이너에 해당하는 도커 객체를 관리하는 프로세스.
  • 도커 데스크톱(Docker Desktop) : 도커 클라이언트-서버를 손쉽게 사용할 수 있도록 제공하는 프로그램. 도커 데스크톱에는 도커 클라이언트, 도커 데몬, 쿠버네티스, 도커 컴포즈 등이 포함되어 있음.
  • 도커 레지스트리(Docker Registry) : 도커에서 실행되는 이미지를 저장하는 저장소. 도커 허브(Docker Hub)가 주로 레지스트리 역할을 함.
  • 도커 객체(Docker Object) : 도커에서 생성하고 사용하는 개체.
    • 컨테이너(Container) : 이미지가 실행 가능한 상태에 해당하는 인스턴스. 운영체제의 프로세스와 같은 개념. 컨테이너는 호스트 환경과 다른 컨테이너 환경과 격리되어 있음. 
    • 이미지(Image) : 도커 컨테이너를 생성하기 위한 읽기 전용 템플릿 명령어. 실행 파일과 같은 개념.

도커 클라이언트에서 Docker run ubuntu /bin/bash 명령어를 실행하면 서버-클라이언트 간에 발생하는 일은 아래와 같습니다.

  1. ubuntu 이미지가 도커 서버에 설치되어 있는지 확인. 설치되어 있지 않다면, docker pull ubuntu 명령어가 자동으로 실행되어 레지스트리로부터 ubuntu 이미지를 가져와 설치함
  2. docker container create가 자동으로 실행되어 컨테이너가 생성됨
  3. 도커는 컨테이너에게 파일 시스템에 대한 읽기-쓰기 권한을 부여함
  4. 컨테이너에게 별도의 네트워크 지정 옵션을 사용하지 않았다면, IP주소가 할당이 됨
  5. 컨테이너가 실행되고 /bin/bash를 실행함
  6. /bin/bash에서 exit를 입력하면, 컨테이너는 중지되지만, 컨테이너는 삭제되지 않음.

Docker 장점

도커를 사용하면 3가지 장점을 얻을 수 있습니다.

  • 일관된 환경으로 애플리케이션 개발 및 배포 가능 

소프트웨어 개발 협업을 할 때, 주로 소스코드를 공유하여 애플리케이션을 공동개발을 합니다. 그러나, 개발자가 사용하는 런타임 환경을 다를 수 있으므로, 런타임 환경은 별도로 맞춰야 하는 단점이 있습니다. 도커를 이용한다면, 소스코드뿐만 아니라, 런타임 환경 자체도 같이 배포하는 효과를 볼 수 있어, 표준화된 개발환경을 공유하여 개발 및 배포가 가능해집니다.

  • 반응형 배포 및 확장

도커를 사용하면 데스크톱, 랩탑, 데이터센터, 가상 머신 등을 고려하지 않고 배포 가능합니다. 또한, 애플리케이션 사용자가 급격하게 증가하거나 감소하였을 경우, 유동적으로 서버를 확장 및 축소 가능하여, 워크로드를 조정할 수 있습니다.

  • 동일한 하드웨어에서 더 많은 워크로드 실행

하이퍼바이저 기반 가상화는 가상 머신이 구동되고 이를 하이퍼바이저가 관리하는 구조이므로 컴퓨터 리소스를 많이 사용합니다. 도커는 컨테이너 기반 가상화로 애플리케이션을 구동하므로, 컨테이너를 관리하는 데 있어 컴퓨팅 리소스를 하이퍼바이저 가상화보다 적게 사용합니다. 그러므로, 도커는 하이퍼바이저 가상화보다 더 많은 애플리케이션을 구동할 수 있는 장점이 있습니다.

이상으로 도커 정의, 용어 그리고 아키텍처에 대해 알아보았습니다. 자세한 내용은 아래 링크 참조 바랍니다. 

 

Docker overview

 

docs.docker.com

 

 

728x90
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함