본문 바로가기
Docker/이론

[Docker] 1.Container

by Haengsin 2021. 7. 29.

1. 왜 리눅스에서 운영해야 하는가?

- 리눅스 커널의 기능을 기반으로 컨테이너가 만들어짐.

(1) chroot : 독립된 공간을 형성

(2) namespace : 독립된 공간에 6가지 isolate를 제공 (각 컨테이너가 마치 하나의 가상 시스템인 것처럼)

(3) cgroup : 필요한만큼의 H/W를 지원.

※ Container Engine

: Linux Kernel에 있는 Storage, Namespaces, Networking 을 Docker Platform 에서 쓸 수 있도록 지원해주는 것이 Container Engine이다.

 

※ Windows와 MacOS에는 kernel이 없으므로, Hypervisor 를 활성화시켜서 그 위에 Container를 돌린다.

즉, 라이센스 비용이 들어가지 않는 Linux 기반으로 따로 Hypervisor를 설치할 필요 없이 Container Engine을 구축하고 Container를 동작한다. 

 

2. 그냥 프로그램과 컨테이너는 어떻게 다른가?

: 하는 일은 같지만 구조가 다르다.

 

(1) 일반 프로그램

아래와 같은 코드가 동작하려면 서버에 Node,js 를 설치해야 소스 코드를 해석/실행할 수 있다.

8080 port/tcp 로 Listen 중인 Application

(2) 컨테이너

: Dockerfile을 통해 해당 소스 코드를 실행할 환경을 가지고 있을 컨테이너를 빌드하는 것이다.

Container

- Dockerfile을 통해 Container를 빌드하려면 환경을 만들어야 한다. 

- FROM node:12  // node.js 코드를 해석할 수 있는 환경을 만들기 위해 설치

- app.js 를 저장하고 실행.

 

 

 

 

3. 왜 사용하는가? 

: 개발자가 만든 프로그램을 어디서든 돌릴 수 있다.

- 확장/축소(Scale out/Scale in)하기 쉬움.

- MSA(Micro Service Architecture), DevOps 환경에 적합. 

> 고객의 요구를 빠르게 처리하고 응답해야 하는 최근의 운영 트랜드에 적합.

 

(1) 환경의 제약이 없이 바로 적용

과거에는 개발 환경과 고객사의 환경(Infra, H/W가 운영되는 구조, OS 및 Application들의 Base와 버전 등)이 틀리기 때문에, 개발자가 만든 프로그램들이 고객사에서 동일한 모습으로 실행되는 데까지의 어려움이 있었다.

 

그러나, 컨테이너는 그 운영 환경을 컨테이너 안에 담았기 때문에 이러한 환경의 제약이 없이 바로 적용될 수 있다.

개발자가 만든 Application 이 운영 환경에서 동일하게 동작한다. 

 

(2) 확장성

: 기존에 서버 하나를 뛰우려면 OS를 설치하고 Node.js를 설치하는 등 환경 구성에 많은 시간이 걸린다. 또한, Scale-out 등 여러 서버로 운영이 필요한 상황에서 OS 전체를 확장할 필요 없이 Application 용량만큼만 확장하면 되기 때문에 절약적이고 가볍다.

 

 

 

 

※ 이성미, [따배도] 도커 시리즈 ,TTABAE-LEARN, https://www.youtube.com/watch?v=3HId-tpYaZs&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=2, 2021-08-31

'Docker > 이론' 카테고리의 다른 글

[Docker] 7.Container 리소스 관리  (0) 2021.09.07
[Docker] 5.Container 운영  (0) 2021.08.24
[Docker] 4.Container Registry  (0) 2021.08.12
[Docker] 3.Container(3)  (0) 2021.08.03
[Docker] 2.Container(2)  (0) 2021.07.30