도커를 이해하기 위해서는 가상화에 대해 알아야 한다. 가상화부터 알아보자.
가상화란?
가상화란 한 대의 시스템 하드웨어를 논리적으로 분할하여 가상의 시스템을 생성 및 활용하는 개념이다. 가상 시스템들은 서로 독립적인 하나의 시스템으로 인지되기 때문에 주어진 하드웨어 리소스를 효율적으로 사용할 수 있다.
가상화에서 중요한 것은 두가지 단어이다.
1. 논리적 분할
2. 독립적
논리적 분할은 얼마든지 생성과 삭제가 쉽다는 것이다. 예를 들어, 물리 시스템은 마음대로 생성하거나 삭제하는것이 쉽지 않다. 하지만, 가상화 같은경우는 개념적으로 분할된 것이기 때문에 언제든 생성과 삭제가 가능하다.
독립적이라는 것은 가상화의 결과물들이 서로 간섭하지 않는다는 것을 말한다. 즉, 가상화된 시스템들은 서로 별개의 시스템으로 인식한다.
도커란?
도커란?
- 하이브리드 클라우드에서 모든 애플리케이션 처리하는 컨테이너 플랫폼 제공자
- 운영체제 레벨에서 가상화를 제공하는 컨테이너화 기술
- 컨테이너 사용, 응용 프로그램 보다 쉽게 생성, 배포 및 실행할 수 있도록 설계된 도구
- 지난 10 년 동안 사용된 LXC에서 진화한 오픈소스 애플리케이션 배포 컨테이너
- LXC 사용하여 다른 응용 프로그램에서 운영 체제(OS) 커널, CPU, RAM 공유
도커의 기능
• BUILD: 이미지 생성하기(Download, Dockerfile)
=> Downlaod : 기존의 이미지 가져와서 사용
=> Dockerfile : 스스로 이미지 만들기
• SHIP: 이미지 저장하기(Docker Registry – public & private)
=> Docker Registry : 이미지가 저장된 곳
=> public : 누구나 접근가능한 저장소, docker hub 같은 곳 / private : 개인/회사가 만든 레지스트리. 반드시 인증 필요
• RUN: 이미지 실행 & Container 생성
=> container 내부에는 application 이 있음. 이를 우리가 사용
도커의 구조
도커의 구조 1)
1. docker daemon
- 도커 REST API 요청을 듣고 도커 오브젝트들(이미지, 컨테이너, 네트워크 그리고 볼륨)을 관리
cf) Docker Object : 이미지, 컨테이너, 네트워크, ...
2. Rest API
- 접근 경로 -> interface
- client가 docker daemon에게 rest api를 통해 접근
3. docker CLI
-Client가 접근하는 부분
-사용자가 도커와 상호작용하게 만들어줌
도커의 구조 2)
1. Docker Client
- Docker client는 Docker와 Docker 유저들이 상호작용하도록 도와줌
- Command를 작성하면 client는 dockerd(docker daemon)에게 command를 전달
- docker command는 Docker api를 사용
- 1개 이상의 데몬과 통신할 수 있음
• docker build – 이미지 생성
• docker pull – Docker Registry/Hub등에서이미지 다운로드
• docker run – 컨테이너 생성 및 앱 시작
• docker push – Registries로 이미지 업로드
2. Docker Daemon
- Dockerd는 Docker API(Rest API)의 요청을 client에서부터 listen
- Docker Object (이미지, 컨테이너, 네트워크 그리고 볼륨) 관리
- daemon은 docker service를 관리하기 위해 다른 daemon과 통신 가능
3. Docker Registry/Hub
- docker image를 저장하는 곳
- public registry => Docker cloud와 함께 누구나 사용가능
- private registry => 누구나 private registry를 가질 수 있음
4. Docker Objects
- Docker를 사용할때 만들고 사용하는 것
- Images, containers, networks, volumes, plugins, and others