오토에버 클라우드 2기 30일차
컨테이너
컨테이너란 실행에 필요한 모든 파일을 포함한 전체 실행(runtime) 환경에서 애플리케이션을 패키징하고 격리할 수 있는 기술이다 (런타임 단위에서의 격리 실행 환경)
일반적으로 서비스를 실행할 때 vm에서 올려서 사용할 수 있는데 컨테이너를 이용하는 것과 차이가 존재한다
| 항목 | 가상화(VM) | 컨테이너(Docker 등) |
|---|---|---|
| 격리 수준 | 전체 OS 포함 (하이퍼바이저 기반) | OS 커널 공유, 사용자 공간만 격리 |
| 무게감 | 무겁고 리소스 많이 사용 | 가볍고 빠름 |
| 부팅 속도 | 느림 (수십 초 ~ 수 분) | 매우 빠름 (몇 초 이내) |
| 실행 환경 | 각 VM에 OS 설치 필요 | 호스트 OS와 커널 공유 |
| 사용 기술 | VirtualBox, VMware, KVM 등 | Docker, containerd 등 |
현재 서버 가상화는 컨테이너를 사용하지 않는다
KVM
리눅스에서 KVM를 설치만하면 가상화가 된다는데 원리는 몰랐다 KVM모듈을 설치하면 설치한 리눅스 OS가 하이퍼바이저가 된다 그래서 그위에 여러 가상OS를 만들 수 있다 즉, 기존 리눅스 OS를 하이퍼바이저로 변경하는 것이다
Docker (도커)
Docker는 애플리케이션을 컨테이너로 만들고 실행할 수 있는 플랫폼 컨테이너는 애플리케이션과 그 종속성(라이브러리, 설정 파일 등)을 격리된 환경에 패키징하여, 어떤 환경에서든 동일하게 실행되도록 보장
Docker의 특징
- 다양한 활용 분야: 마이크로서비스 아키텍처로의 전환은 물론, DevOps(개발 및 운영), 테스트 환경 구축, CI/CD(지속적 통합/지속적 배포) 파이프라인 등 다양한 분야에서 핵심적인 도구로 활용
- Linux Container의 구현체: Docker는 Linux Container(LXC) 기술을 기반으로 하며, 컨테이너 가상화의 사실상 표준 구현체로 자리 잡음
- Linux 커널 종속성: Docker 컨테이너는 호스트 운영 체제의 Linux 커널을 공유하여 실행
- 이 때문에 Windows 환경에서 Docker를 설치할 때 WSL(Windows Subsystem for Linux)을 설치하라고 안내
- Windows는 자체 Linux 커널이 없으므로, WSL이 제공하는 Linux 환경 위에서 Docker가 작동해야 하기 때문
- 컨테이너 내부에서 실행되는 프로그램도 기본적으로 Linux용 프로그램
- 경량성 및 효율성: 가상 머신(VM)과 달리 호스트 OS의 커널을 공유하므로, 오버헤드가 적고 시작 시간이 빠르며 시스템 자원을 효율적으로 사용
Docker Image (도커 이미지)
Docker Image는 컨테이너를 생성할 때 사용되는 읽기 전용 템플릿 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정 등)을 포함하는 패키지
- 생성 및 재활용: 실행 중인 컨테이너의 현재 상태를 기반으로 새로운 이미지를 생성할 수 있습니다. 또한, 기존 이미지를 수정하여 새로운 이미지로 저장하는 것도 가능합니다.
- 이식성 (Portability): 한 번 생성된 이미지는 Docker 엔진이 설치된 어떤 물리 서버나 클라우드 환경에서도 동일한 컨테이너를 생성하고 실행할 수 있습니다. 이는 “Build once, Run anywhere(한 번 빌드하고, 어디서든 실행하라)”라는 컨테이너의 핵심 가치를 실현합니다.
- 레이어 구조: 이미지는 여러 개의 읽기 전용 레이어(Layer)로 구성되어 있어, 효율적인 저장 및 전송이 가능합니다. 변경 사항이 발생하면 해당 레이어만 추가되므로 용량을 절약할 수 있습니다.
Docker Hub (도커 허브)
Docker Hub는 Docker 이미지의 공식 퍼블릭 레지스트리입니다. 전 세계의 개발자들이 이미지를 공유하고 다운로드할 수 있는 클라우드 기반 서비스입니다.
URL: https://hub.docker.com
- 이미지 저장 및 공유: 사용자들이 자신의 이미지를 업로드하여 다른 사람들과 공유할 수 있다
- 공식 이미지 제공: Ubuntu, Nginx, MySQL 등 주요 운영체제, 프레임워크, 소프트웨어에 대한 공식 이미지를 제공
- 종류: 단일 소프트웨어를 포함하는 이미지(예: ubuntu, nginx), 또는 여러 소프트웨어가 미리 구성된 이미지(예: LAMP 스택 이미지) 등 다양한 종류의 이미지를 찾을 수 있다
- 자동 빌드: GitHub나 Bitbucket과 연동하여 소스 코드 변경 시 자동으로 Docker 이미지를 빌드하고 Docker Hub에 푸시하는 기능을 제공
컨테이너 가상화와 주요 도구 컨테이너 가상화는 엄밀히 말해 완전한 가상화가 아닌 프로세스 가상화에 가깝다 호스트 운영체제의 커널을 공유하면서, 그 위에 애플리케이션의 실행 파일, 라이브러리, 설정 파일 등을 이미지(Image) 형태로 빌드하여 패키지로 배포
컨테이너 기술은 최신 기술이 아니며, 오랜 시간 동안 발전해 왔다 특히 LXC(Linux Containers) 기술의 성숙과 이를 차용한 Docker의 등장으로 컨테이너 생성, 관리, 배포가 훨씬 쉬워지면서 완벽한 가상화 솔루션으로서 광범위하게 활용