도커 & 쿠버네티스

d4v1d·2022년 2월 14일
0

Docker & Kubernetes

목록 보기
1/8
post-thumbnail
post-custom-banner

도커(Docker)란?

도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트입니다.

컨테이너(Container)

컨테이너는 어플리케이션 실행 코드와 모든 의존성을 포함한 소프트웨어 패키지 유닛입니다. 컨테이너를 활용하여 하나의 컴퓨팅 환경에서 다른 환경으로 빠르고, 안정적으로 어플리케이션을 실행할 수 있습니다.
도커 컨테이너 이미지는 다음과 같은 특징을 지닙니다.

  • 가볍다(lightweight).
  • 독립적이다(standalone).
  • 코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정 등 어플리케이션을 실행하기 위한 모든 것들을 포함하고 있는 실행 가능 패키지(executable package)이다.

이미지(Image)

컨테이너 이미지는 도커 엔진에서 실행되는 런타임에 컨테이너가 됩니다. 컨테이너화된 소프트웨어는 인프라 구조에 관계없이 항상 동일하게 실행됩니다. 이 덕분에 실행중인 환경에 관계없이 어플리케이션이 언제나 동일하게 실행될 것을 보장합니다.

도커 vs. 가상 머신(Virtual Machine)

도커 컨테이너가상 머신 Virtual Machine
한 컴퓨터에서 여러 개의 컨테이너를 OS 커널을 공유하여 실행할 수 있습니다. 각 컨테이너는 사용자의 메모리에서 독립적으로 실행되며 VM과 비교하여 더 적은 메모리만을 차지합니다.여러 VM이 독립적으로 실행되지만, 각 VM마다 해당 어플리케이션을 실행하기 위한 OS를 포함해야 하므로 컨테이너보다 많은 메모리를 차지하고, 배포가 무겁고 부팅이 더 오래 걸릴 수 있습니다.

도커를 시작해야 하는 이유

  • 애플리케이션 개발과 배포가 편해집니다.

    서버를 부팅할 때 실행되는 운영체제를 '호스트 OS'라고 부릅니다. 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간으로, 컨테이너 내부에서 소프트웨어를 설치하고 설정 파일을 수정하더라도 호스트 OS에 영향을 끼치지 않습니다. 또한, 도커 이미지는 커널을 포함하지 않기 때문에 이미지 크기가 가상 머신에 비해 굉장히 작습니다. 이미지 내용을 레이어 단위로 구성하며 중복되는 레이어를 재사용할 수 있어서 애플리케이션 배포 속도가 매우 빠릅니다.

  • 애플리케이션 독립성과 확장성이 높아집니다.

    도커는 서비스에 필요한 여러 모듈을 독립된 형태로 구성하는 마이크로서비스 구조를 구현하기에 적합합니다. 예를 들어 웹 서비스는 데이터베이스 컨테이너와 웹 서버 컨테이너로 분리할 수 있고, 웹 서비스에 부하가 발생하면 웹 서버 컨테이너만을 동적으로 늘려 부하를 분산할 수 있습니다. 이러한 자동화는 일반적으로 도커 스웜 모드, 쿠버네티스 등의 컨테이너 오케스트레이션 플랫폼을 통해 이루어집니다.

쿠버네티스(Kubernetes)란?

What is Kubernetes?
쿠버네티스 간단 소개
쿠버네티스는 컨테이너화된 워크로드(containerized workload)를 관리하기 위한 '컨테이너 오케스트레이션' 플랫폼입니다.

컨테이너 오케스트레이션(Container Orchestration)

수많은 컨테이너들을 관리할 때 필요한 아래 작업들을 안정적으로 자동화하는 것을 말합니다.

Why Kubernetes?

쿠버네티스는 다음 기능들을 제공합니다.

  • 서비스 디스커버리와 로드 밸런싱 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있다.
  • 스토리지 오케스트레이션 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 할 수 있다.
  • 롤아웃 & 롤백 자동화 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있다.
  • 바이너리 패킹(bin packing) 자동화 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다. 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시한다. 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해준다.
  • 복구 자동화(self-healing) 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않는다.
  • 시크릿과 구성 관리 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리 할 수 있다. 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트 할 수 있다.
profile
데이터 엔지니어/백엔드 개발자 d4v1d의 개발 일지🐯
post-custom-banner

0개의 댓글