도커를 왜 사용할까?
Docker란?
- 컨테이너 기반 가상화 도구
- 애플리케이션을 컨테이너라는 느슨하게 격리된 환경에서 패키징하고 실행하는 기능
- 애플리케이션을 인프라에서 분리해 소프트웨어를 신속하게 제공
- 다양한 운영체제에서 사용할 수 있으며, 컨테이너화 된 애플리케이션을 쉽게 빌드 / 배포 / 관리 가능
- 코드 작성과 프로덕션 환경 실행 사이의 지연 시간 절약 가능
- 컨테이너를 제어할 수 있기 때문에 물리 머신을 놓지 않아도 컨테이너를 통해 다양한 물리 자원을 할당하고 실행하고 멈출 수 있으므로, 빠르게 배포하고 인프라 코드를 관리하는 것 처럼 할 수 있음
컨테이너란?
- 가상화 기술 중 하나
- 애플리케이션의 각 구성 요소에 의해 격리된 프로세스
- 호스트 운영체제에 설치된 종속성에 의존하지 않으며, 격리되어 실행하기 때문에 호스트 및 기타 컨테이너에 미치는 영향이 최소화
- 리눅스 커널의 기능을 사용해 만들어짐(하지만, 리눅스에서만 사용해야 하는 것은 아님)
- 어디서나 실행 가능
가상화 기술이란?
- 하드웨어 리소스를 추상화 하는 것
- 메모리 가상화 / 하드웨어 가상화(Hypervisor 기반) / 컨테이너 가상화 / 네트워크 가상화
* 하이퍼바이저(Hypervisor)란?
- 가상 머신을 생성하고 구동하는 소프트웨어
- OS에 자원을 할당 및 조율
- OS의 요청을 번역하여 하드웨어에 전달
도커의 유명 밈 중 하나로, '내 컴퓨터에서는 왜 안돼?'이다.
사실상 글쓴이도 많이 겪어본 현상이기 때문에 무척 공감을 하는데, 위의 Docker와 Container 설명을 보면 이 현상을 해결하기 위해 도커가 나왔다는 것을 알 수 있다.
즉, 위의 설명들을 토대로 정리해 보았을 때 도커가 생겨나고 사용하는 이유는 아래와 같지 않을까 싶다.
' 도커는 컨테이너 기반의 가상화 도구로
컨테이너를 실행하면 완전히 격리되고 필요한 것이 안에 다 있기 때문에 어디에서나 실행 가능하다'
가상머신이란?
- 자체 커널, 하드웨어 드라이버, 프로그램 및 애플리케이션이 포함된 전체 운영체제
- 하나의 물리적인 컴퓨터 자원을 가상적으로 분할 >> 여러 개의 가상 컴퓨터 환경을 만들어내는 기술
가상머신과 컨테이너
- 가상머신
: Hypervisor라는 중간 단계를 통해 가상화를 시켜줌으로서 자원을 할당해 주고 그 위에 배포를 진행
: 리소스 위에 Hypervisor가 자원을 할당
: 각 가상머신마다 독립된 실행 환경을 제공하기 때문에 각 가상머신 당 공간이 필요(Guest OS는 오버헤드가 크고 무거움)
: 기존 레거시 및 모놀라식 워크로드를 수용하거나 인프라 리소스 프로비저닝 및 다른 OS에서 또 다른 OS를 실행할 때 적합
- 컨테이너
: 독립된 실행 환경을 제공하지 않음
: 컨테이너 엔진이 자원을 할당해주고 구동을 진행하여 OS의 자원을 공유
: 컨테이너의 개수가 늘어나더라도 공간을 많이 차지하지 않음
: 빠르게 자주 변경하고 다시 배포해야 하는 거의 모든 애플리케이션이 컨테이너화에 적합
[ 차이점 ]
컨테이너 | 가상머신 | |
정의 | 애플리케이션의 코드, 라이브러리 및 애플리케이션 실행 환경을 구성하는 기타 종속 구성 요소가 포함된 소프트웨어 코드 패키지 | 물리적 시스템의 디지털 복제본입니다. 물리적 하드웨어를 여러 환경으로 분할 |
가상화 | 운영체제를 가상화 | 기반 물리적 인프라를 가상화 |
캡슐화 | 애플리케이션 또는 애플리케이션 구성 요소를 실행하는데 필요하며, 운영 체제보다 상위에 있는 소프트웨어 계층 | 운영체제, 그 위의 모든 소프트웨어 계층, 그리고 여러 애플리케이션을 포함 |
기술 | 기반 운영 체제와 리소스를 조율 | 파이퍼바이저가 기반 운영체제 또는 하드웨어와 조율 |
크기 | 더 작음 | 훨씬 큼 |
제어 | 컨테이너 외부 환경에 대한 제어 권한이 적음 | 전체 환경을 보다 효과적으로 제어 |
유연성 | 더 유연 오프레미스 환경과 클라우드 중심 환경 간의 신속하게 마이그레이션 가능 |
유연성이 떨어짐 마이그레이션에 어려움이 존재 |
확작성 | 확장성이 뛰어남 마이크로서비스를 통해 세분화된 확장이 가능 |
확장하는데 비용이 많이 들 수 있음 비용 효율적인 확장을 위해 온프레미스에서 클라우드 인스턴스로 전환해야 함 |
출처 : https://aws.amazon.com/ko/compare/the-difference-between-containers-and-virtual-machines/
컨테이너와 VM 비교 - 배포 기술 간의 차이점 - AWS
컨테이너와 가상 머신을 사용하면 여러 환경에서 실행할 수 있도록 애플리케이션을 완전히 격리할 수 있습니다. 컨테이너와 가상 머신은 기본 인프라를 가상화하거나 추상화하므로 사용자가
aws.amazon.com
도커의 내부 구조는 어떻게 생겼을까?
1. Client
- Docker run
- Docker build
- Docker pull
: 위 요소들을 통해 Host의 daemon을 제어하고 생성하는 역할을 할 수 있도록 하며, Docker와 상호작용 진행
2. Docker Host
1. Docker daemon
: Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨과 같은 Docker 개체를 관리
: 컨테이너를 생성 / 시작 / 중지 / 삭제하는 등의 작업
(도커 오브젝트)
2. Image
: Docker 컨테이너를 생성하기 위한 지침이 포함된 읽기 전용 플랫폼
3. Container
: 실행 가능한 이미지 인스턴스
: Docker API or CLI를 사용해 컨테이너를 생성 / 시작 / 중지 / 이동 / 삭제 가능
: 하나 이상의 네트워크에 연결하거나, 스토리지를 연결하거나, 현재 상태를 기반으로 새 이미지 생성 가능
3. Registry
: 도커 이미지를 관리하고 저장
* Docker Hub : 누구나 사용할 수 있는 공개 레지스트리
이해를 위한 Ex)
App Store = Docker Hub
Program = Image
Process = Container
도커 허브에서 이미지를 다운받아 컨테이너를 실행한다.
* Docker 공식 홈페이지 : https://docs.docker.com/get-started/overview/
Docker overview
Get an in-depth overview of the Docker platform including what it can be used for, the architecture it employs, and its underlying technology.
docs.docker.com
* Docker Hub : https://hub.docker.com/explore
Docker
hub.docker.com
'공부 자료 > Kubernetes & Docker' 카테고리의 다른 글
[Docker] 도커 허브와 이미지, 그리고 컨테이너 (0) | 2024.06.12 |
---|---|
[Docker] 도커의 동작 원리 (1) | 2024.06.11 |
[Docker] 도커란 무엇인가? (1) | 2024.06.06 |
[Docker] Dockerfile (0) | 2024.05.15 |
[Docker] Docker CLI 기본 명령어 (0) | 2024.05.13 |