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 를 설치해야 소스 코드를 해석/실행할 수 있다.
(2) 컨테이너
: Dockerfile을 통해 해당 소스 코드를 실행할 환경을 가지고 있을 컨테이너를 빌드하는 것이다.
- 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 |