도커

[클라우드] 1. Docker 개요

트리스탄1234 2022. 8. 3. 08:36
728x90
반응형

이번 글에서는 클라우드 환경에서 실제 구동 중인 어플리케이션 및 라이브러리들을 패키징 하여 Container로 구동 및 배포를 시켜 주는 Docker라고 하는 Open Source 플랫폼의 개요에 대해서

알아 보겠 습니다.

 

Docker는 PaaS(Platform as a Service)기반에서 Container를 구동 및 관리해 주는 플랫폼입니다.

아래 그럼 처럼 VM과 Container의 차이를 보면, VM(Virutal Machine)은 HW위에 설치된 Host OS위에 Hypervisor가 설치가 되고 그 위에 VM의 사용자가 요구하는 OS가 설치가 되고, 또 그위에 필요한 어플리케니션과(실행 프로그램), 필요한 라이브러리들을 Guest OS 별로 따로 가져 가는 구조 입니다.

반면 Container는 VM보다 굉장히 가볍습니다. 아래 그림처럼 HW(Hardware)위에 Host OS가 설치되고 그 위에 Docker라는 Container Engine이 설치가되고, 그위에 어플리케이션(실행 프로그램)과 라이브러리들이 생성이 됩니다.

그럼 대체 VM보다 Container가 가볍다는 점 말고 다른 장점은 무엇알까요? 아래 그림을 봅시다.

아래 그림은 On-premise(클라우드 환경이 아닌 서버),와 Iaas(Infra as a Service), PaaS(Plaform as a Servioce), SaaS(Service as a Sercive)에서 클라우드 제공 업체와 사용자 사이게 각자 어디까지 관리를 해야 하는지에 대한 그림 입니다.

회색 부분은 실제 사용자가 관리를 해야 하는 부분 입니다. 파란색은 클라우드 제공 업체가 관리를 하는 부분 입니다.

VM의 경우는 IaaS라고 보시면 되고, Container는 PaaS 가 됩니다. 차이점을 더 살펴 보기 위해서 서버에 장애가 난 경우를 생각을 해 봅시다. VM의 경우에는 클라우드 제공업체가 신규 VM에 OS설치까지만 하고 사용자는 나머지 작업을해 주어야 됩니다, 예를 들면 DB설치, 어플리케이션 설치. 환경 설정등.. 다시 말해 장애가 난 경우 복구하는데 시간이 많이 소요 되지요. 반면에 Container는 Runtime(프로그램 실행 환경)까지 클라우드 제공업체가 책임을 집니다. 사용자는 단지 기존에 저장되어 있던 어플리케이션 데이터들만 복구를 하면 서비스가 복구가 되는 구조라고 보면 될것 같습니다. 다시 말해 장애 복구 시간이 굉장히 짧아 진다는 애기죠.

그럼 이제 이런 Container를 생성/배포/관리 해주는 Docker의 구조에 대해서 알아 봅시다. 아래는 Docker 플랫폼의 구조 입니다.

Docker는 Client와 Docker daemon그리고 Registory로 구성이 됩니다. 하나 하나씩 그 역활을 보면

- Client: 사용자와 Docker Daemon 사이에서 UI(User Interface)역활을 해줍니다. 즉 사용자의

요청을Docker Daemon에 전달을 하는 역활 입니다.

- Docker Daemon: Docker의 객체(컨테이너, 네트웍,볼륨)에 대한 API요청을 받아 처리해 줍니다.

- Docker Registory: 외부의 서버나, 로컬 컴퓨터(사용자) 컴퓨터에 위치를 하고, 컨테이너로

실행할 Image들을 저장하는 저장공간 입니다.

이런 Docker는 사용자별 컨테이너를 분리 하는 기술로 리눅스 커널의 Name Space를 사용하여 컨테이너를 분리해 줍니다 . 그 간단한 구조를 보면 아래와 같습니다.

이런 Name Space의 종류는 아래와 같습니다

- The pid namespace: 프로세스 분리 (PID: Process ID).

- The net namespace: 네트워크 인터페이스 분리(NET: Networking).

- The ipc namespace: IPC관리 (IPC: InterProcess Communication).

- The mnt namespace: 파일 시스템 마운트 관리(MNT: Mount).

- The uts namespace: 커널과 버전 관리. (UTS: Unix Timesharing System).

그럼 이제 Docker로 생성된 Image의 구조에 대해서 알아 봅시다. Image는 컨테이너를 실행 시키기 위해 Runtime, 라이브러리, 소스등을 포함하고 있는 SW 묶음입니다. 이런 Image들은 계층(Layer)로 구성이 됩니다. 아래 그림을 봅시다.

위의 그림에서 맨 왼쪽을 보면 커널을 포함한 Image 1.0이 있고 그 위에 Apache라고 하는 프로그램이 설치되어 있는 Image에서, 그림의 중간 처럼 Git이라는 SW를 추가하고 신규 Image를 생성 하더라도, 신규 Image는 기존 Image에서 Layer 1(GIT)만 추가가 되면 됩니다. 이렇게 신규 Layer가 추가 되는 경우는 dockerfile에서 COPT, FROM, RUN, 명령이 실행 될때마다 Layer가 추가 됩니다,

이런 Layer들은 Container나 실행이 되면, Read/Write할수 있는 Layer속성을 가지고, 그 하위 Layer들은 Read Only Layer의 속성을 가지게 됩니다.

이런 Docker의 흐름을 보면 dockerfile로 부터 신규 Image가 생성(Build)되어서 Image가 생성이 되고 이 Image를 실행을 시키면 Container에서 구동이 되면서 최상위 Layer Rear/Write 속성을 가지고 실행이 되는 구조 입니다.

#도커

#docker

#클라우드

#이미지 관리

#container

#PaaS

#Plaform as a Service

#Docker management

#클아우드 환경의 이미지 관리.

728x90
반응형