오늘은 현대 소픝웨어 배포 및 관리를 위한 핵심 기술인 Container(컨테이너), Docker(도커), Kubernetes(쿠버네티스) 에 대해 이해하는 시간을 가져보도록 하겠습니다. 각각의 개념을 간략히 이해해보도록 하겠습니다.
A. Container(컨테이너)
컨테이너는 소프트웨어를 실행하기 위한 가볍고 독립적인 환경을 제공합니다. 각 컨테이너에는 프로그램을 실행하기 위해 필요한 모든 실행파일, 라이브러리, 설정 파일등이 포함되어 있으며, 호스트 운영체제의 커널을 공유하지만 서로 격리되어 실행됩니다. 이를 통해 서로 다른 환경에서 일관된 애플리케이션 동작을 보장합니다.
1. 경량화된 가상화 기술
- 컨테이너는 하이퍼바이저 기반의 가상머신과 비교해 훨씬 가볍습니다. VM의 경우 자체 운영체제를 포함하지만, 컨테이너는 호스트 운영체제의 커널을 공유하므로 오버헤드가 적습니다.
- 빠른 시작시간과 더 적은 자원사용이 가능해 효율적입니다.
2. 애플리케이션과 종속된 패키지를 하나로 묶음
- 컨테이너는 애플리케이션과 그 실행에 필요한 모든 라이브러리와 종속성을 포함합니다. 이를 통해 개발환경과 운영 환경간의 일관성을 유지할 수 있습니다. Build once, run anywhere!!
3. 빠른 배포
- 컨테이너는 VM에 비해 훨씬 빠르게 배포될 수 있습니다. 컨테이너 이미지를 만들고, 이를 다양한 환경에 배포할 수 있어 지속적 통합/배포(CI/CD) 파이프라인에 활용하기 매우 유용합니다.
B. Docker(도커)
도커는 컨테이너를 쉽게 만들고 배포할 수 있게 도와주는 플랫폼입니다. 도커는 컨테이너 이미지를 생성하고 관리하며, 이를 다양한 환경에서 실행할 수 있는 도구와 서비스를 제공합니다.
1. 컨테이너 이미지 생성, 배포, 관리 도구 제공
docker build 를 통해 이미지를 만들고, docker run을 통해 이를 실행할 수 있습니다.
2. Docker Hub를 통한 이미지 공유 및 배포
- Docker Hub는 도커 이미지의 중앙 저장소 역할을 합니다. 손쉬운 도커 이미지 업로드와 공유가 가능합니다.
3. 도커 파일을 사용한 이미지 정의
- 도커 파일에 컨테이너 이미지를 정의하고, 이를 통해 애플리케이션 환경을 코드로 명시하고 버전관리를 할 수 있습니다. 예를 들어, 애플리케이션 빌드 단계, 종속성 설치, 환경 변수 설정 등을 도커 파일로 관리할 수 있습니다.
4. 도커 컴포즈를 통한 다중 컨테이너 애플리케이션 관리
- Docker Compose는 여러 컨테이너로 구성된 애플리케이션을 정의하고 실행하는 도구입니다.
docker-compose.yml 파일을 사용해 각 서비스의 설정을 명시할 수 있습니다. 이는 복잡한 애플리케이션도 손쉽게 배포하고 관리할 수 있게 해줍니다.
C. Kubernetes(쿠버네티스)
쿠버네티스는 컨테이너화된 애플리케이션의 배포, 스케일링 및 운영을 자동화하는 오픈소스 시스템입니다. 쿠버네티스는 컨테이너 오케스트레이션 도구로, 여러 호스트에 걸쳐 컨테이너를 관리하고 조정합니다.
1. 자동화된 배포와 롤백
- 새로운 버전 배포시 문제가 발생하면 자동으로 롤백할 수 있습니다. 이는 애플리케이션의 안정성을 보장하고 다운타임을 최소화합니다.
2. 서비스 디스커버리와 로드 밸런싱
- 클러스터 내의 컨테이너들이 서로를 자동으로 발견(discovery)하고 통신할 수 있게 해줍니다. 또한 트래픽을 여러 컨테이너에 분산시키는 로드 밸런싱을 제공합니다.
3. 스토리지 오케스트레이션
- 로컬 스토리지, 클라우드 제공 스토리지, 네트워크 스토리지 등 다양한 스토리지 시스템과 통합되어 작동하고 이는 데이터의 지속성을 보장합니다.
4. 자동화된 빈 패킹 (자원 최적화)
- 클러스터 내의 자원을 효율적으로 사용하는 방향으로 컨테이너를 배치하여 자동의 사용을 최적화하고 비용을 절감합니다. 즉 밀도 높게 컨테이너를 클러스터에 배치합니다.
5. 자가 치유(Self-healing)
- 실패한 컨테이너를 자동으로 재시작하거나 교체합니다. 이는 수동 개입을 최소화하여 시스템의 가용성을 높입니다.
6. Secret 구성 및 관리
- 비밀번호, OAuth token, SSH 키 등 민감한 정보를 안전하게 저장하고 관리하여 보안을 강화합니다.
D. 한줄 요약
1. Containers (컨테이너)
- 각각 애플리케이션 코드, 종속성, 라이브러리를 포함하는 경량화된 독립 환경입니다.
2. Docker (도커)
- 컨테이너를 생성하고 관리하는 플랫폼입니다. 도커 CLI, 도커 컴포즈, 도커 허브와 같은 도구를 포함하고 있습니다.
3. Kubernetes (쿠버네티스)
- 여러 도커 컨테이너를 오케스트레이션하고 운영을 자동화하는 시스템입니다. 자동화된 배포, 스케일링, 로드 밸런싱, 자가 치유와 같은 기능을 제공합니다.