- Application 배포 방식
Tranditional Deployment ( 전통적인 app 배포 방식 )
- 물리적인 서버에 application 이 동작할 수 있는 환경 구축 - infrastructure 영역
- 물리적인 서버에 app 설치를 통한 서비스 제공
장점
- app이 물리적인 서버의 자원을 직접적으로 활용 가능 - 리소스 사용에 제약이 없음
단점
- app 설치 시 필요한 공유 라이브러리가 없으면 설치에 어려움이 있음 - 개발 환경과 운영 환경의 차이
- 특정 app이 물리적인 서버의 리소스를 과다사용하는 것의 통제가 어려움
Virtualized Deployment ( 가상 머신을 통한 배포 방식 )
- 가상 머신을 구성하여 application 배포
가상 머신은 hypervisor 기반으로 s/w 적으로 구성된 컴퓨터 시스템 - virtualbox/vmware 또는 cloud 환경
- 가상머신을 app을 동작할 수 있게 하는 최상의 환경으로 구성하여 배포함으로써 전통적인 배포 방식의 문제점 해결
장점
- app 간의 격리(Isolate) 가능
- 배포 시 가상 머신 배포를 통해 app 실행 환경 구성의 어려움을 극복
단점
- 가상 머신 환경은 결국 h/w 환경을 s/w 적으로 구성하는 것이므로 현재의 h/w 리소스를 분배해 사용함으로써 리소스 관리 측면에서 효과적이지 않음
- 각각의 가상머신에는 별도로 o/s 를 설치해야 하고, 또한 공유 라이브러리도 각각 설치해야함으로 하나의 시스템 관점에서는 중복되게 설치되는 문제
- 배포되는 크기가 큼
Container Deployment ( Container를 통한 배포 방식 )
- Container도 하나의 가상 환경
- Container 에는 app, app이 동작하기 위해 필요한 실행 환경만으로 구성됨
- Container 는 vm과 유사한 방식으로 동작하는 구조
Container와 vm의 차이점
- container 는 독립된 o/s 를 가지고 있지 않음
- container 는 host o/s 에서 관리하는 process 형태로 동작함
- container 는 완전 격리된 형태의 process 로 동작함, 다른 process와는 별개임 - 기존 linux process 와 차이
- container가 동작하는 process는 독립적인 자원 사용을 할 수 없도록 제어됨
장점
- 기존 vm에 비해서 container 는 크기가 작음
- 기민한 app 배포
- 지속적인 개발, 통합 및 배포
- 개발과 운영의 관심사 분리
- 개발, 테스팅 및 운영 환경에 걸친 일관성
- 클라우드 및 OS 배포판 간 이식성
- 리소스 격리
- 자원 사용량 - 고효율, 고집적
- Docker
Docker - Container 기술의 한 종류, Container 생성 관리 역할
VM처럼 완전 독립된(완전 격리된) 실행 환경 생성
- 하드웨어 레벨 가상화
가상 머신을 이용한 가상화, Hypervisor 기반 가상화 - virtualbox, vmware
- 운영체제 레벨 가상화
container engine 을 통하여 프로세스 단위 가상화 - docker
process - o/s kernel 에 의해서 관리되는 대상, 하나의 프로그램 실행 시 생성되는 단위
운영체제를 설치하는 것과 유사한 효과를 낼 수 있지만, 실제 운영체제를 설치하지 않기 때문에 설치 용량이 적고, 실행 속도 가 빠르다
docker container는 일종의 소프트웨어 실행에 필요한 모든 것을 완전한 파일 시스템 안에 감싼 상자 같은 모양
- 런타임 코드, 시스템 도구, 시스템 lib 등 서버에 설치되는 모든 것을 아우른다. 이는 실행중인 환경에 관계없이 동일하게 실행될 것을 보증함
- Docker 구성 요소
- Docker Engine + Docker Container
- Docker Engine ( docker daemon ) - docker process
container runtime
container 생성 및 실행, 관리하는 역할 수행
docker engine 이 사용하는 기술적 요소
- chroot ( change root )
- 특정 디렉토리를 최상위 디렉토리인 root 로 인식하게끔 설정하는 리눅스 명령
- namespace
- 프로세스 자원을 관리하는 기능
- mnt, pid, net, ipc, user 등의 자원을 그룹화하여 할당하는 기능
- cgroup (control group )
- CPU, memory, disk, I/O, network 등의 자원 사용량 제어를 통해 특정 app의 과도한 자원 사용 제한
- UnionFS (Union File Sys)
- 여러 개의 파일 시스템을 하나의 파일 시스템으로 마운트 시키는 가상 파일 시스템
- Docker Container - application process
격리 ( Isolate ) 된 응용 프로그램 실행 환경 (가상환경)
container 기술 장점
- 하이퍼바이저와 게스트 o/s 가 없기 때문에 가벼움
- 경량이기 때문에, 만들어진 이미지 복제, 이관, 배포가 쉬움
- 게스트 o/s를 부팅하지 않기 때문에 app 시작 시간이 빠름
- 가상 머신보다 경량이므로 더 많은 애플리케이션을 실행할 수 있음
- Docker 에서 적용하는 LXC (LinuX Container) 기반 기술
chroot (Change root)
- root 변경
- linux sys의 / 디렉토리 위치를 변경
chroot <변경할 root 디렉토리 경로> <명령 shell 지정>
- root 권한으로 실행
- 먼저 변경할 root 디렉토리 생성
- 변경할 root 디렉토리로 이동 후 chroot 명령 수행
- 변경한 root 디렉토리에서 사용할 shell 지정
ldd <실행 파일 이름>
- 실행 파일이 사용하는 공유 라이브러리 목록 출력
'Kubernetes > [구름] 쿠버네티스 전문가 양성 과정 k-digital' 카테고리의 다른 글
[9주-9.28] Docker 환경 구성 (0) | 2022.09.29 |
---|---|
[9주-9.27] Docker / 기반 기술 이해 (0) | 2022.09.29 |
[8주-9.23] playbook 확장 (0) | 2022.09.23 |
[8주-9.22] playbook 이해 (0) | 2022.09.22 |
[8주-9.21] Ansible - module, YAML, playbook 개요 (0) | 2022.09.21 |