목차
- 컨테이너란
- 컨테이너 배우는 이유
- 왜 굳이 리눅스에서 돌리는지?
- 그냥 프로그램과 컨테이너의 차이
- 왜 컨테이너 쓰는지
컨테이너란
프론트/백단 어플리케이션을 동작시키는 데에 필요로 하는 환경(ex-라이브러리,SW 플랫폼(nodeJs,자바...))을
미리 맞춰두고 하나의 상품을 동작시켜주는 독립된 공간
- EX) 해산물 수출에 필요한 설비는?
생선을 수출할 때 냉동으로 해야하니까 컨테이너에 냉동설비를 갖춘다.
상품에 따라서 냉동/냉장/건조/안정장치 있는 설비가 필요할 수 있다.
컨테이너 안에 들어가는 물건들에 무엇인지에 따라서 미리 컨테이너의 환경을 만들어 두고
물건들을 넣어서 유통하는 것.
컨테이너 배우는 이유 : SW 운영 플랫폼의 변화
ex) 하드웨어 성능 ↑ , 가격 ↓, IT 전환되어야할 업무들이 많아지고 플랫폼도 커짐
- 대용량의 Bare Metal (:SW가 설치되어있지 않는 깡통시스템) 플랫폼(첫 번째 그림)
대용량의 Bare Metal에다가 여러개의 애플리케이션(초,노,빨)을 운영했던 구조로 사용 - Virtualization(가상화) 플랫폼 (두 번째 그림)
Bare Metal 시스템 + Hypervisor + Hypervisor의 SW 기술 가지고 가상컴퓨터(Virtual Muchine)를 만든 것에
필요한 어플리케이션을 올려서 사용하는 구조 - Container(컨테이너) 플랫폼
Bare Metal에 OS를 올리고 Container Engine을 올리는 플랫폼. 그러한 기반에서 앞의 플랫폼에 싣는 동일한 컨테이너 애플리케이션을 동작시킴 ( 도커는 Container Engine 중 하나이고 이름은 Docker Containerd ) BE,FE 각각의 어플리케이션 운영에서 요구하는 다양한 어플리케이션 환경을(ex- 서비스 중단없이 어플리케이션이 운영되어야 한다) 대응하기 위함. - 장점 : 실제 어플리케이션에 최소화 되어있는 환경만 들어가기 때문에 작은 용량으로 운영 가능하다. 독립적인 공간안에서 작은 용량의 프로그램이 실행되기 때문에 확장성과 배포에 있어서 용이하다.
리눅스에서 실행하는 이유
컨테이너는 리눅스 커널 기능을 가지고 만들어졌기 때문에 리눅스 커널 기능을 써야해서
- chroot : 독립된 공간 형성해주는 명령어
- namespace : 하나의 가상 프록시 시스템인 것처럼 독립된 공간에다가 6가지 isolate 기능 지원해주는 명령어
- cgroup : 필요한만큼 hw를 지원해주는 명령어
- 다른 OS(Windows, Mac)에서는 리눅스커널이 없으므로 Hypervisor를 활성화 시켜서
그 위에다가 컨테이너를 돌리는 것(리눅스커널 기능 서포트)
리눅스는 이미 리눅스 커널가지고 운영하기 때문에 바로 도커 플랫폼을 올려서 사용 가능
그래서 실제 현장에서는 다른 OS 기반으로 서비스를 운영하는 게 아니라 라이센스 비용이 안들어간 리눅스 기반으로 컨테이너 엔진 채우고 그 위에다가 컨테이너 동작시키려 함.
cf - 도커플랫폼(=컨테이너 플랫폼)에서 리눅스 기능들이 쓰일 수 있도록 지원해주는 게 컨테이너 엔진.
그냥 프로그램과 컨테이너는 어떻게 다른지?
하는 일은 같지만 구조가 다르다.
ex- 웹서버,nodejs, 웹 기반의 어플리케이션..이거까진 같아. 하지만 모양이 다름.
ex- 프론트단에서 운영되는 웹서버 하나를 nodeJS를 소스코드로 만들었다 치는 경우
- 일반 어플리케이션의 동작
리눅스/node를 실행할 컴터에다가 nodeJS를 설치해야돼.
왜냐면 소스코드를 해석해서 실행할 수 있어야 하니까.
os에 따라 설치방법이 다름 (리눅스의 우분투 리눅스에서 apt gap -Install 또는 센토 os ....윈도우/맥용 node)
그 후에 위의 소스코드인 app.js 실행하기 위해 node app.js 명령어 실행. - 컨테이너 플랫폼에서의 동작
동일한 소스코드를 컨테이너를 빌드한다. : #cat DockerFile 환경 : node node가 있어야 소스코드를 해석을 함. 만들어놓은 app.js를 동작시켜주도록 저장하고 실행해주는 컨테이너를 빌드하게된다.
- ENTRYPOINT
컨테이너 안에 node라는 환경을 만들고 app.js를 동작시키고 실행함.
그럼 컨테이너가 8080포트를 열고 클라이언트 연결이 들어오면 hostname에 대해스 응답을 해줌.
# cat Dockerfile FROM node:12 COPY app.js /app.js ENTRYPOINT ["node", "app.js"] - 결론
동작하는 어플리케이션은 같은데 모양이 다르다.
어플리케이션 운영환경에서 바로 올려서 쓰는 기반인지 컨테이너 기반인지의 차이
하는 용도는 같은데 왜 쓰는지?
- 개발자가 만든 그대로 어디서든 돌아감
⇒ 확장/축소가 쉽고 MSA(MicroServiceArchitecture),Devops 환경에 적합
고객의 요구를 빠르게 처리해서 바로바로 응대해줄 수 있도록 플랫폼을 만들어줘서 제공해야하는 시대기 때문. 개발자가 컨테이너기반에서 어플리케이션을 개발해서 고객사에 제공함. 과거에 컨테이너 기반이 아녔을 때는 H/W가 운영되는 구조 또는 어플리케이션의 기반이 다 다르잖아. 그래서 개발자가 만든 프로그램이 고객사에서 동일한 모습으로 실행되기까지의 어려움이 있었다. 개발환경과 운영환경이 다르기 때문에. 근데 컨테잉너기반에서는 컨테이너에다가 그 프로그램의 운영환경을 넣었기 때문에 (os단에서 지원해주는 게 아니라.) 어느 고객사의 환경에서도 바로바로 올려서 돌아가게 할 수 있다. 만들어진 환경과 동일한 형태로 동작하게끔 지원해줄 수 있고 환경에 영향받지 않으므로. - 컨테이너 안에서 독립적으로 어플리케이션을 운영 가능
nodejs의 프론트엔드 어플리케이션을 올린다고 치면, 일반 어플리케이션 시스템(100mb)을 확장할 때 os(1g)와 묶어져서 컴퓨터시스템이 확장되는 구조. 1g+100mb가 같이 움직이는구조 컨테이너 구조 컨테이너 올릴 수 있는 도커플랫폼을 만들고 앞서서 만들었던 컨테이너(100mb)를 하나 올린 상태에서 확장하고 싶으면 컨테이너(100mb)를 하나 더 올림 돼. 컨테이너 용량만 따진다. 한쪽이 서비스가 안되도 다른 쪽에서 지원을 해줄 수 있다. 적은용량으로 빠르게 확장/축소 해줄 수 있다. 어플리케이션 서비스는 작게나눠서 프론트단 기능별로 만들어내려고 하는데 그걸 가지고 서비스 해주는 게 msa. 개발자가 개발에서 운영까지를자동화시켜주는거 devops. 이 두 가지 환경에서는 컨테이너 환경이 적합하다.
'DEVOPS > Docker' 카테고리의 다른 글
[따배도] 5강 - 컨테이너 Registry (0) | 2022.05.12 |
---|---|
[따배도] 4강 - 도커 컨테이너 만들어보기 (0) | 2022.05.12 |
[따배도] 3강 - 도커 컨테이너 살펴보기 (0) | 2022.05.12 |
[따배도] 2강 - 도커 설치 (0) | 2022.05.12 |
[따배도] OT (0) | 2022.05.11 |