CICD/docker
[Docker] Container를 쓰는 이유
[dev] hiro
2024. 6. 14. 20:47
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)
Container
시대가 바뀌어 가면서 애플리케이션은 점점 커지면서 소프트웨어 운영 플랫폼이 바뀜.
하드웨어는 용량은 커지고, 싸지며 성능 또한 좋아짐.
소프트웨어 운영 플랫폼이 바뀌는 중
- Bare Metal
- 하나의 시스템의 OS 위에 여러개의 Application을 띄워서 사용하는 형식.
- 예전 시스템 및 애플리케이션들은 용량을 많이 차지 하지 않았기 때문에 하나의 컴퓨터에서 동작하기도 충분했었음.
- Virtualization(HypervisorX)
- Virtal Machine을 이용하여(하나의 컴퓨터) 새로운 Application을 띄우는 형식.
- 하나의 컴퓨터에서 가상 머신을 사용하여 여러개의 프로그램이 여러개의 컴퓨터에서 돌아가도록 하는 형식.
- 하지만 가상화 플랫폼은 Scale-in / Scale-out 기능이 어려웠음.
- Any Infrastructure
- 하나의 서버를 여러개 띄우는 Scale-out / Scale-in 구조 적용 가능.
- OS 위에 Container Engine
- Docker는 Container Engine 중에 하나
- container platform을 사용.
- Container는 아주 적은 용량만 차지.
- isolate된 공간에서 작동. => 확장 및 배포가 쉬움.
Container의 역할
Container는 즉 App을 실행시키는 환경을 세팅하는 것.
App을 실행하는데 필요한 library, SW Platform(node.js, java 등...) 등을 독립된 공간에 대한 환경을 세팅해줌.
리눅스에서 돌려야 하는 이유
컨테이너는 리눅스의 커널 기능을 사용해야 함.
- chroot
- 독립된 공간 형성
- namespace
- isolate 기능 지원(6가지 독립 컨테이너를 위한 공간)
- cgroup
- 필요한만큼 HW 지원
- 세가지 명령어로 커널 + 컨테이너를 만듦.
- 리눅스 커널을 도커 플랫폼(컨테이너 플랫폼)에서 사용할 수 있도록 해주는 것이 컨테이너 엔진
💡 리눅스가 아닌 환경에서 docker를 실행하려면??
windows, macos에서는 Hypervisor(리눅스를 돌릴 가상환경) 활성화 후 그 위에 컨테이너 띄우기
프로그램 VS 컨테이너
하는 일은 프로그램과 컨테이너 둘이 같지만 구조가 다름.
// cat app.js
const http = require('http');
const os = require('os');
console.log("Test server starting...");
var handler = function(req, res) {
res.writeHead(200);
res.end("Container Hostname: " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);
이러한 코드가 있을 때
- 일반 프로그램
- 해당 app.js를 실행시키기 위해
- (운영체제에 맞는) node.js를 설치
- 그 위에서 app.js 실행
- 컨테이너
- 컨테이너 구축 환경 설정
- node 기반, app.js 실행
# DockerFile
FROM node:12
COPY app.js /app.js
ENTRYPOINT ["node", "app.js"]
Container를 사용하는 이유
개발자가 만든 프로그램이 어디서든 동작하도록.
운영환경과 배포환경이 다르기때문에 hw가 다르면 동일하게 돌아가지 않을 수 있음.
컨테이너화를 시키면 개발자가 만든 환경으로 어디서든 돌아갈 수 있음.
확장/취소가 쉽고, MSA, DevOps에 적합
컨테이너는 용량이 작음.
작은 용량 덕분에 서비스 연속성 및 확장성, scale-out 용이
참조
더보기
- 소프트웨어 운영 플랫폼: https://datanet.co.kr/news/articleView.html?idxno=131759