1. Docker란

- 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다.
- Go 언어로 작성되었다.
- 도커 엔진은 혹은 도커에 관련된 모든 프로젝트: 도커 컴포즈(Docker Compose), 레지스트리(Private Registry), 도커 머신(Docker Machine), Kitematic 등
- 보통 도커 엔진은 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 주 프로젝트이다. 즉, 도커 엔진을 효율적으로 사용하는 방법을 익힌다는 것은 도커와 관련된 모든 프로젝트를 다루기 위한 첫걸음이라고 봐도 무방하다.
2. Docker Engine 사용하는 방법
2.1 가상 머신과 Docker Container

| 가상머신 | 도커 컨테이너 | |
| 운영체제 | 우분투(Ubuntu), Centos 등 운영체제 설치 | |
| 가상화 공간 | 독립적, 하이퍼바이저 | 독립적, 리눅스 자체 기능(chroot, namespace, cgroup) |
| 이미지 크기 | 수 기가 바이트에 달하는 가상 이미지 | 컨테이너 이미지로 크키가 비교적 적음 |
| 이미지 생성 후 배포 시간 | 느림 | 비교적 빠름 |
| 성능 손실 | 일반 호스트에 비해 성능 손실 가능성 있음 | 성능 손실이 비교적 거의 없음 |
1) 가상 머신
- 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기 때문에 이미지 크기가 커서 배포 하기 부담스럽다.
2) 도커 컨테이너
- 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너 이미지로 만들었을 때 이미지 용량 또한 가상 머신에 비해 비교적 줄어든다.
- 리눅스 자체 기능을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다.
2.2 Docker Container의 장점
1) 애플리케이션의 개발과 배포가 편하다.
- 도커 컨테이너는 호스트 OS 위에서 실행되는 격리되는 공간으로 독립된 개발 환경을 보장받을 수 있다.
- 서비스를 개발 했을 때 사용했던 환경을 다른 서버에서도 컨테이너로서 똑같이 복제할 수 있기 때문에 개발/운영 환경의 통합이 가능해진다.
- 도커 이미지는 가상 머신 이미지와 달리 커널을 포함하고 있지 않아 이미지 크기가 크지 않다.
- 도커는 이미지 내용을 레이어 단위로 구성하며, 중복되는 레이어를 재사용할 수 있어서 애플리케이션의 배포 속도가 매우 빨라진다.
*호스트OS: 서버를 부팅할 때 실행되는 운영체제를 의미함
2) 여러 애플리케이션의 독립성과 확장성이 높아진다.
- 마이크로 서비스의 구조이다.
*마이크로 서비스의 구조
- 여러 모듈을 독립된 형태로 구성하여 언어에 종속되지 않고 변화에 빠르게 대응할 수 있다.
- 즉, 각 모듈이 관리가 쉬워진다.
- 유지보수가 용이하다.
- 마이크로서비스는 개발자가 그 구조를 직접 구현하는 것보다 도커 스웜 모드, 쿠버네티스 등의 컨테이너 오케스트레이션 플랫폼을 토해 사용하는 것이 일반적이다.
3) 프로젝트 자체의 성숙도, 확장성, 편의성 등의 이유도 존재한다.
'Cloud Dev > Docker' 카테고리의 다른 글
| 5. Dockerfile (0) | 2022.04.12 |
|---|---|
| 4. Docker Container 기초 사용법 (0) | 2022.04.11 |
| 3. 도커 컨테이너(Docker Container) (0) | 2022.04.11 |
| 2. 도커 이미지(Docker image) (0) | 2022.04.11 |