본문 바로가기
DevOps

[Dev] 도커(Docker)

by 기몬식 2023. 10. 19.

Docker

출처

도커는 애플리케이션을 컨테이너로 패키징해주는 툴로 Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼입니다.
컨테이너를 이용해 애플리케이션 소스 코드를 임의의 환경에서 해당 코드의 실행에 필요한 운영체제(OS) 라이브러리 및 종속 항목과 결합하는 실행 가능한 표준으로 컴포터넌트화 합니다.
도커를 사용하지 않고도 컨테이너를 구축할 수 있지만 도커 플랫폼을 사용함으로서 보다 손쉽고 간편하고 보다 안전하게 컨테이너를 빌드, 배치 및 관리 할 수 있습니다.
즉 도커는 기본적으로 개발자가 단일 API를 통한 업무 절감 자동화와 간단한 명령어를 사용하여 컨테이너를 빌드, 배치, 실행, 업데이트 및 중지할 수 있도록 해주는 툴킷(toolkit)입니다.

Docker Container

출처

컨테이너는 애플리케이션이 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행될 수 있도록 코드와 모든 종속성(dependency)을 패키지화하는 소프트웨어의 표준 단위입니다.
즉 컨테이너는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정 등 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 경량의 독립형 실행 가능 소프트웨어 패키지입니다.

컨테이너는 하이퍼바이저를 통해 다수의 가상 머신(VM)이 단일 하드웨어 서버의 CPU, 메모리 및 기타 리소스를 공유하는 것과 유사한 방식으로 Linux 커널에 빌드된 가상화 기능과 프로세스 격리를 통해 컨테이너 기술을 이용합니다.
컨테이너는 호스트 시스템과 공유 커널을 사용하여 애플리케이션 격리, 비용 효율적인 확장성, 폐기 가능성을 포함하여 VM의 모든 기능과 장점을 제공합니다.

  • 표준: 도커는 컨테이너에 대한 업계 표준을 만들었으므로 어디에서나 사용할 수 있습니다.
  • 경량화: 오직 애플리케이션 실행에 필요한 OS 프로세스와 종속 항목만 포함하며 컨테이너 크기는 메가바이트(MB) 단위로 측정이 됩니다. 이는 기가바이트(GB) 단위로 측정이 되는 일부 VM의 경우 보다 하드웨어 용량을 잘 활용하며 구동 시간이 훨씬 신속합니다.
  • 리소스 효율성: 컨테이너는 동일 하드웨어에서 애플리케이션의 다수의 사본을 여러 번 실행함으로써 클라우드 비용 절감으로 이어집니다.
  • 생산성: 컨테이너는 VM보다 빠르며 보다 간편한 배치, 프로비저닝 및 재시작이 가능합니다.. 따라서 이는 지속적 통합(CI) 및 지속적 배포(CD) 파이프라인에서 사용하기에 이상적입니다.

서로 다른 소프트웨어를 컨테이너로 규격화하여 사용 가능합니다.

Container & Virtual Machine

출처

VM(Virtual Machine)과 컨테이너는 애플리케이션 및 서비스를 격리된 환경에서 실행하고 관리하는 가상화 기술이지만 그 동작 방식과 특징에는 중요한 차이점이 있습니다.

Container

컨테이너는 코드와 종속성을 함께 패키지하는 앱 계층의 추상화입니다. 여러 컨테이너가 동일한 시스템에서 실행될 수 있으며 OS 커널을 다른 컨테이너와 공유할 수 있고 각 컨테이너는 사용자 공간에서 격리된 프로세스로 실행됩니다.

컨테이너는 기본적으로 하이퍼바이저와 게스트 OS가 필요 없어서 비교적 가볍고 쾌적하게 구동됩니다.
컨테이너는 호스트의 CPU를 사용하며 컨테이너에 CPU, 메모리 할당량을 지정하여 해당 컨테이너가 사용할 수 있는 CPU, 메모리 양을 제한할 수 있습니다.
또한 호스트의 파일 시스템을 공유하며 동시에 컨테이너 내부에 파일 시스템을 구성할 수 있습니다. 각 컨테이너는 독립적인 파일 시스템을 가지고 있지만 이는 호스트와 공유합니다.

VM

VM은 하나의 서버를 여러 서버로 바꾸는 물리적 하드웨어의 추상화입니다. 즉 한 컴퓨테어 있는 자원을 분배하여 사용하기 떄문에 자원을 공유하여 사용하는 컨테이너에 비해 성능에 대한 이슈가 발생 할 수 있습니다.
하이퍼바이저를 사용하여 단일 시스템에서 여러 VM을 실행할 수 있습니다. 하지만 VM에서 사용하는 CPU, 메모리는 호스트 시스템의 물리적 CPU 리소스, 물리적 메모리에 대한 할당을 받습니다. 또한 리적 디스크 또는 가상 디스크에 대한 액세스 권한을 통해 각각의 가상 머신은 자체 파일 시스템을 가지고 있으며 디스크 및 스토리지 리소스는 이를 위해 할당됩니다.
VM은 컨테이너와 다르게 물리적으로 하나의 환경으로 존재하는 것을 논리적으로 가상화해야하기 때문에 Overhead 가 추가적으로 발생합니다.

도커 툴 및 용어

  • Docker File: 모든 도커 컨테이너는 도커 컨테이너 이미지의 빌드 방법에 대한 지시항이 포함된 단순 텍스트 파일로 시작됩니다. DockerFile은 도커 이미지 작성 프로세스를 자동화합니다. 기본적으로 이미지를 어셈블링하기 위해 도커 엔진이 실행할 명령행 인터페이스(CLI) 명령어의 목록입니다.
  • Docker Image: 도커 이미지에는 실행 가능한 애플리케이션 소스 코드는 물론 애플리케이션 코드가 컨테이너로서 실행해야 하는 모든 툴, 라이브러리 및 종속 항목들이 포함되어 있습니다. 이미지는 계층등로 구성되며 각 계층은 해당 이미지의 버전에 해당합니다. 개발자가 이미지를 변경할 때마다 새로운 최상위 계층이 작성되며 이 최상위 계층은 이미지의 현재 버전으로서 이전의 최상위 계층을 대체합니다. 이전 계층은 롤백을 위해 또는 다른 프로젝트에서 재사용될 수 있도록 저장됩니다.
  • Docker Hub: 도커 허브는 스스로 "컨테이너 이미지의 세계 최대 라이브러리 및 커뮤니티"라고 부르는 도커 이미지의 공용 저장소입니다. 모든 도커 허브 사용자는 자신의 이미지를 마음껏 공유할 수 있으며 이들은 컨테이너화 프로젝트의 시작점으로 사용할 수 있도록 도커 파일 시스템에서 사전 정의된 기본 이미지를 다운로드할 수도 있습니다.
  • Docker Registry: 도커 레지스트리는 도커 이미지의 확장 가능한 오픈 소스 스토리지 및 분배 시스템입니다. 레지스트리를 사용하면 식별을 위한 태깅을 사용하여 저장소에서 이미지 버전을 추적할 수 있습니다. 이는 버전 제어 툴인 git을 사용하여 수행됩니다.

오탈자 및 오류 내용을 댓글 또는 메일로 알려주시면, 검토 후 조치하겠습니다.