1.도커의 기초

도커 & 쿠버네티스

도커와 쿠버네티스에 대해 더 공부해보고 싶어 아래책을 구매하였고 포스팅해 볼 예정이다.

도커란 무엇인가

도커는 컨테이너형 가상화 기술을 구현하기 위한 상주 어플리케이션(dockered라는 데몬)과 이 어플리케이션을 조작하기 위한 명령행 도구로 구성되는 프로덕트이다. 어플리케이션 배포에 특화되어 있기 때문에 어플리케이션 개발 및 운영을 컨테이너 중심으로 할 수 있다.
로컬 환경에 도커만 설치하면 몇 줄짜리 구성 파일과 명령어 한줄로 어플리케이션이나 미들웨어가 이미 갖춰진 테스트용 가상환경을 빠르게 구축할 수 있다. 가상화 소프트웨어와 비교해도 오버헤드가 적이진다는 장점이 있다.

도커의 장점

  • 기존 가상화 소프트웨어보다 더 가볍다.
  • 이식성이 뛰어나다.
  • 설치가 번거로운 명령형 도구를 도커 컨테이너로 가져다 사용함으로써 호스트를 깔금하게 유지하면서도 바로 실행할 수 있다.
  • 다양한 의존 라이브러리나 도구를 도커 컨테이너에 포함시켜 배포함으로써 실행 환경과 상관없이 스크립트의 동작 재현성을 높임.
  • 도커 컨테이너를 HTTP 부하 테스트의 워커로 사용해 HTTP 요청 수를 증가시킴.

컨테이너는 운영체제의 동작을 완전히 재현하지는 못하기 때문에 엄밀한 리눅스 계열 운영체제의 동작이 요구되는 가상환경을 구축해야 한다면 VMWare가 더 적합할 수 있다.

컨테이너 가상화?

도커는 컨테이너형 가상화 기술을 사용하는데 이를통해 가상화 소프트웨어 없이도 운여 체제의 리소스를 격리해 가상 운영체제로 만들 수 있다. 이 가상 운영 체제를 컨테이너라 한다. 컨테이너를 만들면서 발생하는 오버헤드는 다른 가상화 소프트웨어보다 더 적다. 빠르게 시작 및 종료할 수 있고 이에 들어가는 리소스도 작은 편이다.

운영체제 가상화?

운영체제 위에서 가상화 소프트웨어를 사용해 하드웨어를 에뮬레이션 하는 방법으로 게스트 운영체제를 만드는 방식을 호스트 운영체제 가상화 라고 한다. 컨테이너형 가상화와 비교하면 구조적으로 오버헤드가 크다.

컨테이너 가상화의 경우 하이퍼바이저와, Guest OS를 만들지 않는것을 확인할 수 있다.

그림에 대해 조금 더 알아보자

VMware, VirtualBox는 호스트 OS위에 게스트 OS 전체를 가상화 하여 사용하는 방식 도커는 게스트 OS를 설치하는 방식이 아닌 서버 운영을 위한 라이브러리만 이미지에 담아 설치하게 되므로 기존의 방법들(전가상화, 반가상화)보다 경량화 된 상태입니다. 즉, 하드웨어를 가상화하는 계층이 없어졌기 때문에 기존 가상머신에 대해 보다 빠른 속도를 제공합니다.
https://real-dongsoo7.tistory.com/60 참고

컨테이너는 하이퍼바이저와 다르다. 컨테이너는 하이퍼바이저와 가상화라는 같은 목표를 갖고 있다. 하지만 하이퍼바이저는 OS 및 커널이 통째로 가상화 되지만 컨테이너는 파일시스템만 가상화가 된다. 컨테이너는 호스트 PC의 커널을 공유한다. 따라서 init등의 프로세스가 떠 있을 필요가 없고 가상화 프록르ㅐㅁ과는 다르게 적은 메모리 사용량 적은 오버헤드를 보인다.

도커를 사용하는 의의

변화하지 않는 실행환경으로 멱등성 확보
코드를 통한 실행환경 구축 및 어플리케이션 구성
실행환경과 어플리케이션의 일체화로 이식성 향상
시스템을 구성하는 어플리케이션 및 미들웨어의 관리 용이성

환경의 차이로 인해 발생하는 문제에 대해 나온것들
1.코드로 관리하는 인프라
코드 기반으로 인프라를 정의한다는 개념. 멱등성을 확보하기위해 어플리케이션이 의존하는 런타임이나 라이브러리 모두가 확실하게 특정 버전으로 설치되도록 해야한다. 멱등성 보장을 위해 항구적인 코드를 계속적으로 작성하는것은 운영 업무에 부담을 주기 쉽다. 또한 서버의 대수가 늘어날 수록 모든서버에 구성을 적용하는 시간도 늘어난다. 이러한 문제에 대한 대책이 불변인프라 개념이다.

2.불변인프라
불변 인프라는 어떤 시점의 서버 상태를 저장해 복제할 수 있게 하자는 개념이다. 제대로 설정된 상태의 서버를 항상 사용할 수 있단는 점이 가장 큰 장점이다. 서버에 변경을 가하고 싶은 경우에는 기존 인프라를 수정하는 대신 새로운 서버를 구축하고 그 상태를 이미지로 저장한 다음 그 이미지를 복제한다. 한번 설정된 서버는 수정없이 파기되므로 멱등성을 신경쓸 필요가 없다.

도커를 활용할 경우 위의 두 개념을 쉽고 낮은 비용으로 실현할 수 있다. 도커는 컨테이너형 가상화 기술을 사용하다. 가상 머신의 OS를 재현하는게아닌 운영체제 대부분을 호스트 운영체제와 공유한다. 실행에 걸리는 시간이 짧은만큼 인프라를 완전히 새로 만드는 불변 인프라와 궁합이 잘 맞는다.

도커 컴포즈가 단일 서버를 넘어 여러 서버에 걸쳐있는 여러 컨테이너를 관리할 수 있도록 한 도구가 도커 스웜이다. 여러컨테이너를 관리하는 것만이 목적인 도커 컴포즈와 달리 도커 스웜은 컨테이너 증가 혹은 감소는 물론이고 노드의 리소스를 효율적으로 활용하기 위한 컨테이너 배치 및 로드 밸런싱 기능 등 더욱 실용적인 기능을 갖추고 있다. 또한 롤링업데이트(오래된 컨테이너와 새로운 컨테이너를 단계적으로 서비스에 교체 투입하는것)가 가능하다. 이처럼 여러 서버에 걸쳐있는 여러 컨테이너를 관리하는 기법을 컨테이너 오케스트레이션이라 한다.

컨테이너 오케스트레이션 분야에서 사실상 표준으로 자리 잡은 것은 쿠버네티스이다.

도커를 통해 인프라와 어플리케이션이 모두 컨테이너 형태로 제공되면서 인프라와 어플리케이션의 설정을 모두 코드수준에서 쉽게 수정할 수 있게됐다. 기존에는 명확했던 인프라 엔지니어와 서버 사이드 엔지니어의 영역 구분이 점점 희미해지고 있다.

Share