본문 바로가기

Cloud Dev/Docker

1. Docker

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