Nubes et Stella

Docker #01 본문

DevOps/Docker

Docker #01

SeongYeong Han 2023. 8. 22. 12:53

01. Docker란?

"도커"는 LXC(리눅스 컨테이너스)라는 커널 컨테이너 기술을 이용하여 만든 가상화 서비스이다. 2013년 3월 산타클라라에서 열린 Pycon Conference에서 dotCloud의 창업자인 Solomon Hykes가 The future of Linux Containers 라는 세션을 발표하면서 처음 세상에 알려졌다고 한다.

 

 

 

02. 도커의 특징

  • 가벼움 : 운영체제를 가상화하지 않는 컨테이너 기술이니만큼 가상머신에 비해서 가벼우며, 한 대의 서버에 여러 개의 서비스를 구동하기 좋다.
  • 보안 : 운영중인 서비스가 해킹 당하더라도 격리된 구조인 만큼 원 서버에 영향을 미치기가 쉽지 않다.
  • 리소스 : 도커는 각 컨테이너들이 각자 할당된 자원이 아니라 하나의 HOST서버 리소스를 모두 공유하므로 리소스 낭비가 줄어든다.
  • 비용 : 각각의 컨테이너 크기가 매우 작고, 하나의 물리 서버에 다수의 컨테이너를 가동시킬 수 있으므로 비용절감 효과가 있을 수 있다.
  • 확장성 : 프로그램 개발이 완료되면 개발했던 환경을 '도커 이미지'로 만들어 그대로 배포할 수 있다.

 

 

03. 컨테이너와 하이퍼바이저 차이

** 도커와 하이퍼바이저의 가장 큰 차이는 게스트OS의 유무이다.

Virtual Machine VS Containers

 HyperVisor
- 호스트OS 위에 새로운 OS를 설치하여 각각 컴퓨터 인 것 처럼 사용

- 작업공간을 격리할 수 있음 (로컬파일들과 섞일 염려가 없음)

- Windows/Linux 등 다양한 OS 선택 가능

Container
- 호스트OS의 자원들을 컨테이너끼리 공유 (자원의 효율성)

- 상대적으로 가벼우며, 속도가 빠름 (몇 초 만에 새로운 컨테이너 생성)

- 호스트OS와 커널을 공유하기 때문에 전혀 다른 OS 생성 불가

  (ex. 리눅스 호스트에 윈도우OS 컨테이너 생성 불가)

 

 

04. 도커 아키텍처

Docker Arichitecture

 

  • Client : 도커 Container를 관리하고 실행하기 위해서 Daemon과 상호작용하는 Binary 파일이다.
  • Registry : 도커 Image가 저장되어 있는 장소이다. 대표적으로 Docker Hub가 있다. Registry는 Public Registry와 Private Registry가 있다.
  • Daemon : Host에 설치되어 도커 Container를 관리하는 daemon 프로세스이다. Client와 상호작용한다.
  • Image : 도커 Daemon을 통해 Container로 실행 가능하도록 필요한 프로그램, 라이브러리, 소스 등이 설치된 파일이다.
  • Container : Image를 실행한 상태이다. 

 

 

05. 도커 기술

가. namespaces

리눅스에서는 접속한 게스트 별로 독립적인 공간을 제공하고 서로가 충돌하지 않도록 리소스를 격리시키는 namespace 기능을 커널에 내장하고 있다.

 

 

mnt 호스트 파일 시스템에 구애받지 않고 독립적으로 파일 시스템을 마운트 하거나 언마운트 가능
pid 독립적인 프로세스 공간을 할당
net namespace 간에 network 충돌 방지 (중복 포트 바인딩 등)
ipc 프로세스 간의 독립적인 통신 통로 할당
uts 독립적인 hostname 할당
user 독립적인 사용자 할당
Time Namespace 독립적인 시스템 시간 할당
Control group Namespace 자신이 속한 cgroup의 그룹의 상대적인 경로 제공

 

나. cgroups

Control Groups 는 프로세스들이 사용할 수 있는 컴퓨팅 자원들을 제한하고 격리시킬 수 있는 기능이다.

 

다. Networking

 

1. Docker 설치 후 Host의 인터페이스에 docker0 라는 가상 인터페이스 생성

2. 해당 인터페이스는 브리지의 역할을 하며 172.17.0.0/16 서브넷을 가지게 된다.

3. 컨테이너가 생성될 때 마다 172.17.0.1, 172.17.0.2....순으로 ip할당

4. 컨테이너는 내부 Namespace에 할당되는 "eth0", 호스트 docker0에 바인딩 되는 "veth" 인터페이스 2개가 생성

 

- END -

'DevOps > Docker' 카테고리의 다른 글

Docker #02 (Command)  (0) 2023.11.14