인프라/Docker

[Docker] 도커란?

2juhyunju 2021. 12. 21. 10:04

도커란?

도커는 리눅스 컨테이너를 다루는 도구 컨테이너 런타임라고 한다.

LXC(리눅스 컨테이너) 와 Docker는 다르다.

도커의 특징

- 이식성: 애플리케이션 개발 단계는 크게 개발 단계, 테스트 단계 서비스 계로 나뉜다. 이때 각 단계의 환경을 통일하기는 쉽지 않다. 하지만 도커를 사용하면 컨테이너에 모든 환경을 구축하기 때문에 도커만 설치하면 된다.

 

- 서버를 코드 형태로 정의: 도커는 이미지를 사용하여 컨테이너를 실행한다.

 

- 상호운용성: 구글,아마존,IBM,마이크로소프트,레드헷 등 다양한 벤더에서 지원하기 때문에 벤더의 시스템 및 오픈 소스와 연계하여 사용할 수 있다.

도커의 구조

- 이미지: 컨테이너를 생성하려면 미리 제작된 이미지가 있어야 한다. 이미지는 여러 개의 레이어로 이루어져 있으며, 각 레이어는 Read Only 상태로 사용된다. 만약 이미지로 컨테이너를 실행하여 파일을 생성하거나 삭제한다면 새로운 레이어를 만들어 내용을 저장한다. 이 때 사용하는 방식이 COW(Copy on Write)와 유사하다.

 

- 저장소: 컨테이너를 생성하려면 이미지가 있어야 하고 이미지는 호스트가 아닌 외부에 저장되어 공유할 수 있어야한다. 이를 저장소 라고 한다. 범위에 따라 퍼블릭 이미지 저장소와 프라이빗 이미지 저장소로 나눌 수 있다. 이미지 저장수에는 대표적으로 도커 허브가 있으며 도커 허브에는 퍼블릭과 프라이빗 이미지 저장소 둘 다 사용할 수 있다.

 

- 컨테이너: 실행해서 메모리에 적재되는거 컨테이너 1:1 서비스

컨테이너

도커의 기능

- 이미지 생성: 도커는 다양한 방법으로 이미지를 생성할 수 있다. 가장 대표적이며 일반적으로 사용하는 것이 Dockerfile(code)이며 그 밖에 컨테이너를 이미지로 생성하는 docker commit 명령과 컨테이너의 파일시스템으로 이미지를 생성하는 docker exportdocker import 명령이 있다.

 

- 이미지 공유: 도커는 저장소를 사용하여 이미지를 공유한다. 저장소에는 도커 허브뿐만 아니라 다른 프라이빗 이미지 저장소도 사용할 수 있다.

도커 오브젝트

- image

- container

- network

- volume

사용하는 기술

- cgroup(Control Group): 프로세스 또는 쓰레드를 그룹화 하여 관리하는 기능 리룩스 컨테이너는 호스트의 리소르를 공유하여 사용하는데 이 때 cgroup를 사용하여 리소스(CPU,메모리,디스크 입출력 등) 제한할 수 있다. 또한 같은 호스트 에서 동작하는 서로 다른 컨테이너에 영향을 주지 않도록 막아주는 역할도 하고 있다.

 

- namespace: 이름공간이라고 부르며 이 공간에 다수의 오브젝트를 격리 할 수 있다.
ex) 호스트에서 동일한 PID를 가질 수 없지만 서로 다른 namespace에서는 동일한 PID를 가질 수 있다.

이름 설명
PID namespace 독립적인 PID 사용
Nework namespace 독립적인 네트워크 기능사용
UID namespace 독립적인 UID 사용
Mount namespace 독립적인 Mount Point 사용
UTS namespace 독립적인 호스트네임 사용
IPC namespace 독립적인 IPC 사용 ( IPC는 잘 사용안하고 메세지 큐 사용많이함)