도커란?
**도커(Docker)**는 애플리케이션을 컨테이너라는 가상 환경에 패키징하고 배포하는 기술입니다. 컨테이너는 애플리케이션이 실행되기 위해 필요한 모든 라이브러리, 종속성, 설정 등을 포함한 독립적인 실행 환경을 제공하는 오픈소스이다.
도커는 왜 생겨났을까?
과거의 배포 (Traditional Deployment)
구성: 하드웨어 → 운영 체제(OS) → 애플리케이션
여러 어플리케이션이 하나의 운영 체제에서 실행이 되므로 서로 의존성과 충돌이 발생할 수 있으며, 시스템 자원의 사용이 제한적이였다. 예를들어 App1이 메모리 100을 먹고 있으면 App는 아무것도 못하지 않는가
가상화 배포 (Virtualized Deployment)\
구성: 하드웨어 → 운영 체제(OS) → 하이퍼바이저(Hypervisor) → 가상 머신(Operating System) → 애플리케이션
여러 개의 가상머신(Virtyal Machine)이 각각 과거의 배포 방식을 가지고 배포를 하게 된다.
서로 분리 된 환경이셔 의존성, 충돌 등에서 비교적 안전하다. 하지만
가상머신 자체가 운영체제를 포함하고 있기 떄문에 상당한 양의 자원을 소비한다는 단점이 존재한다.
컨테이너 배포 (Container Deployment)
구성: 하드웨어 → 운영 체제(OS) → 컨테이너 런타임(Container Runtime) → 컨테이너(Bin/Library + 애플리케이션)
하나의 운영체제 위에서 여러 개의 컨테이너가 실행된다. 가상 머신에 비해 경량화 되어 자원사용이 매우 효율적이다. 각각 필요한 라이브러리 및 종속성을 가지고 있지만 운영체제를 가지고 있진 않다.
도커는 이 컨테이너 배포 방식을 기반으로 하여 애플리케이션을 경량화된 환경에서 독립적으로 실행할 수 있도록 도와줍니다.
그럼 컨테이너가 뭘까?
애플리케이션과 그 애플리케이션이 실행되는 데 필요한 모든 파일, 라이브러리, 의존성 등을 포함하는 가벼운 가상 환경입니다. 컨테이너는 호스트 운영 체제의 커널을 공유하면서도 서로 격리된 상태로 실행됩니다. 이로 인해 도커 컨테이너는 매우 경량이며, 빠르게 시작하고 중지할 수 있는 장점을 가지고 있습니다.
도커의 구성요소
각각의 요소들을 한 번 살펴보자.
1. 도커 클라이언트 (Client)
도커 클라이언트는 도커와 상호작용할 수 있는 인터페이스로, 사용자가 도커 명령을 실행하는 프로그램입니다. 클라이언트는 docker build, docker pull, docker run 같은 명령을 통해 도커 데몬과 통신하여, 컨테이너를 생성하거나 관리할 수 있습니다.
- docker build: 도커 이미지를 빌드하는 명령어로, 주로 Dockerfile을 참조하여 이미지가 생성됩니다.
- docker pull: 이미지를 레지스트리에서 다운로드해 로컬로 가져옵니다.
- docker run: 이미지를 기반으로 컨테이너를 생성하고 실행합니다.
2. 도커 호스트 (Docker Host)
도커 호스트는 실제로 도커 컨테이너가 실행되는 환경입니다. 호스트에는 도커 데몬과 필요한 이미지를 실행할 수 있는 모든 인프라가 포함됩니다. 호스트는 물리적 서버이거나 가상 머신일 수 있으며, 여기에 여러 개의 컨테이너가 실행됩니다.
3. 도커 데몬 (Docker Daemon)
도커 데몬은 도커의 백그라운드 프로세스로, 클라이언트의 요청을 처리하고 컨테이너를 관리하는 역할을 합니다. 클라이언트로부터 명령을 받아 컨테이너를 생성하거나 삭제하며, 이미지를 빌드하거나 가져오는 작업을 처리합니다.
4. 이미지 (Images)
이미지는 도커에서 컨테이너를 실행하는 데 필요한 일종의 템플릿입니다. 이미지는 애플리케이션과 그 애플리케이션이 실행되기 위한 모든 종속성, 설정 파일 등을 포함합니다. 이미지는 불변(read-only)이며, 이 이미지를 기반으로 컨테이너가 생성됩니다. 이미지는 추후 더 다뤄 보겠습니다.
5. 컨테이너 (Containers)
컨테이너는 이미지를 기반으로 실행되는 가상 환경입니다. 하나의 컨테이너는 특정 애플리케이션을 실행하기 위한 독립적인 환경을 제공하며, 각 컨테이너는 서로 격리되어 있습니다. 여러 컨테이너가 동시에 하나의 호스트에서 실행될 수 있으며, 컨테이너는 필요할 때 빠르게 생성되고 중단될 수 있습니다.
6. 레지스트리 (Registry)
도커 이미지를 저장하고 배포하는 중앙 저장소입니다. **도커 허브(Docker Hub)**는 가장 많이 사용되는 공개 레지스트리로, 사용자는 여기에서 이미지를 검색하고 다운로드할 수 있습니다. 또한, 개인 레지스트리를 운영하여 사내에서 사용할 이미지를 저장하고 관리할 수도 있습니다.
'개발공부 > 클라우드' 카테고리의 다른 글
Saas, Paas, Iaas 차이 (1) | 2024.10.20 |
---|