도커에 대해 설명하기전에 컨테이너 개념에 대해서 먼저 알아야한다.

컨테이너 : 리눅스 커널을 공유하여, 프로세스를 격리된 공간에서 띄우는 기술

 

비슷한 용어로 가상화가 있지만, 둘의 의미는 다르다.

 

먼저 가상화 같은경우

컴퓨터 리소스의 추상화라는, 좀더 넓은 의미를 가지고있다.

 

하지만 주로 Hypervisior를 구동하여 가상머신 ( Virtual Machine ) 을 생성하는 논리적 플랫폼 기술을 의미한다.


VM은 리소스의 추상화와 격리가 되어있지만, 크나큰 단점이 하나 있다.

 

바로 Geust OS의 중복이다.

VM 아키텍처

VM을 하나 생성해, 격리할때마다 Gesut OS 위에 Application을 올리므로

Guest OS 만큼의 리소스가 중복으로 낭비되고 있다.

 

이러한 특징은 MSA ( MicroService Architecture )가 떠오르면서, 큰 단점이 되었다.

2021.07.13 - [분류 전체보기] - MSA ( MicroService Architecture )

 


MSA에서 수백 수천개로 나뉘는 서비스를 위해, 효율적인 리소스 활용은 필수가 되었고

운영체제 수준의 가상화리눅스 커널을 공유하는 컨테이너 기술이 떠오르게 되었다.

 

컨테이너는 모든 컴포넌트마다 OS를 가상화하는것이 아니라

리눅스 커널을 공유하고, APP 단위로 가상화하여 구분하는 개념이다.

 

각 컨테이너는 Cgroup, namespace 개념을 적용해, 격리 및 관리가 진행된다.

 

Cgroup


프로세스들의 격리 및 자원관리 역할을 하는 리눅스 커널 기능
cpu, 디스크, 메모리 등을 다룬다.


Namespace

각 컨테이너는 namespace 단위로 리소스가 관리된다.

(1)  Mnt(파일 시스템 마운트) : 파일시스템 포인트 관리
(2)  Pid(프로세스) : 독립적인 프로세스 공간을 할당
(3)  Net(네트워크) : 네트워크 인터페이스. namespace 간에 network 충돌을 방지 (중복 포트 등)
(4)  Ipc(System IPC) : 독립적으로 프로세스 간의 통신 관리 ( Sahred memory, semaphore 등 )
(5)  Uts(hostname) : 독립적인 hostname 할당
(6)  User(UID) : 독립적인 사용자 할당

 

그중, 대표적인 오픈소스 프로젝트가 Docker 이다.

 

도커 아키텍처


도커 이미지

 

 

이미지란 컨테이너 실행에 필요한 파일과 설정 값등을 포함하고 있는 읽기전용 템플릿이다.

( ex: Ubuntu 이미지에는, Ubuntu 구성을 위한 파일과 환경변수값들이 저장되어있다 )

 

 

특징으로는,

 

1) 변하지 않는다.
2) 하나의 이미지로 여러개의 컨테이너를 구동할 수 있다.
3) Dockerfile을 bulid하면 Image가 생성되고, Image 를 run 하면 컨테이너가 생성된다.
4) Git 처럼 Docker Hub를 통해 쉽게 관리할 수 있다 ( Pull & Push )
5) 레이어 개념을 적용해, 이미지 다운로드시 불필요한 작업을 줄인다

 

※ 도커에서 이미지를 만드는 방식 ( 레이어 )

 

- 여러개의 레이어를 겹쳐서 하나의 F/S처럼 동작하는 이미지를 만든다.

 

예를들어, Hello World를 출력하는 웹페이지를 서비스하는 Image를 만든다고 가정하자.
Base Image를 기반으로, ubuntu OS 레이어와, Nginx 레이어를 올려 하나의 이미지를 만들 것이다.

이 이미지를 누군가 다운받아, Hello Wolrd2라는 image를 만들었을때
index.jsp 내용만 바뀌었을뿐인데 전체 레이어를 다시 받을필요가 없다.

변경된 index.jsp 에 해당하는 레이어만 다시 받음으로써,
Hello World2 이미지를 사용할 수 있다.

 

 

도커의 장점

 

어느곳에서든 동일한 환경을 유지할 수 있다.

  - 개발서버가 존재하여, 운영과 동일환경에서 개발하는 경우는 드물다고 생각된다.

    보통 로컬PC 에서 개발하고, 해당 소스를 시스템에 반영할텐데 몇 가지 문제가 예상된다.

     

   1) 가장 먼저, 로컬PC (윈도우) 에서 만든 서비스는, 시스템 (리눅스)에서 호환되지 않을 가능성이 높을 것이다.

   2) 로컬PC의 환경변수 세팅과 시스템의 환경변수가 다르기 때문에, 동일 아키텍처라도 디플로이가 안될수도 있다.

 

컨테이너 단위로 관리

  - 하나의 OS에 다양한 컨테이너를 띄울수 있으며, 각 컨테이너는 독립된 환경이기 때문에

    다양한 서버들을 운영할 수 있다. ( 자바, 파이썬, 오라클 등등 )

 

유연한 자원관리

  - 고정된 자원을 할당받는것이 아니기 때문에, 자유롭게 Scale up/out 이 가능하다.

 

'IT > 도커도커' 카테고리의 다른 글

(5) 도커 Hello World - 웹페이지  (0) 2021.07.22
(4) 도커 Hello World  (1) 2021.07.20
(3) 도커 명령어  (0) 2021.07.19
(1) Ubuntu에 도커 설치하기  (0) 2021.06.30
(0) Oracle VM 을 통한 Ubuntu 서버 설치  (1) 2021.06.29

+ Recent posts