공부하기싫어
article thumbnail

 

  • Application 배포 방식

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 배포판 간 이식성

- 리소스 격리

- 자원 사용량 - 고효율, 고집적

CONTAINER 구조

 

 

  • 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

chroot <변경할 root 디렉토리 경로> <명령 shell 지정>

- root 권한으로 실행

- 먼저 변경할 root 디렉토리 생성

- 변경할 root 디렉토리로 이동 후 chroot 명령 수행

- 변경한 root 디렉토리에서 사용할 shell 지정

 

ldd <실행 파일 이름>

- 실행 파일이 사용하는 공유 라이브러리 목록 출력