본문 바로가기

책/도커, 쿠버네티스를 활용한 컨테이너 개발 실전 입문

도커의 기초

도커의 기본 개념

컨테이너 가상화를 구현하기 위한 상주 애플리케이션과 이를 관리하는 명령형 도구로 구성

컨테이너

 - 컨테이너 가상화 소프트웨어 없이 운영 체제의 리소스를 격리해 만드는 가상 운영 체제

 - 컨테이너를 만들면서 발생하는 오버헤드는 다른 가상화 소프트웨어보다 더 적음

 - 빠르게 시작 및 종료할 수 있고 이에 들어가는 리소스도 작은편

애플리케이션이 중심이 되는 도커

 - 호스트 운영 체제의 영향을 받지 않는 실행 환경(Docker Engine을 이용한 실행 환경 표준화)

 - DSL(Dockerfile)을 이용한 컨테이너 구성 및 애플리케이션 배포 정의

 - 이미지 버전 관리

 - 레이어 구조를 갖는 이미지 포맷(차분 빌드가 가능함)

 - 도커 레지스트리(이미지 저장 서버 역할을 함)

 - 프로그램 가능한 다양한 기능의 API


도커 스타일 체험하기

도커 이미지 빌드 : Dockerfile이나 애플리케이션 실행 파일을 사용해서 도커 컨테이너의 원형이 될 이미지를 만드는 과정

Dockerfile

FROM ubuntu:16.04

COPY helloworld /usr/local/bin

RUN chmod +x /usr/local/bin/helloworld

CMD ["helloworld"]

 - COPY : 파일을 도커 컨테이너 안의 특정 경로로 복사

 - RUN : 도커 컨테이너 안에서 어떤 명령을 수행하는 것

 - FROM : 컨테이너 원형 역할을 할 도커 이미지를 정의

 - CMD : 완성된 이미지를 도커 컨테이너로 실행하기 전에 먼저 실행할 명령을 정의

docker image build -t helloworld:latest

 - 도커 이미지 빌드(Dockerfile이 있는 폴더에서 실행)

 - docker container run helloworld:latest


도커를 사용하는 의의

변화하지 않는 실행 환경으로 멱등성(Idempotency) 확보

 - 불변 인프라

    - 서버에 변경을 가하고 싶은 경우에는 기존 인프라를 수정하는 대신 새로운 서버를 구축하고 그 상태를 이미지로 저장한 다음 그 이미지를 복제

    - 한번 설정된 서버는 수정 없이 파기 되므로 멱등성을 신경 쓸 필요조차 없다.

코드를 통한 실행 환경 구축 및 애플리케이션 구성

 - 코드로 관리하는 인프라

    - 인프라 구성을 Dockerfile로 관리

실행 환경과 애플리케이션의 일체화로 이식성 향상

 - 애플리케이션과 인프라를 묶어서 구축

    - 높은 이식성 - 도커 이미지는 도커가 설치된 머신이라면 어디서든 실행할 수 있다.

시스템을 구성하는 애플리케이션 및 미들웨어의 관리 용이성

 - 필요한 컨테이너를 각각 실행하는 방법으로 시스템을 구성

 - 여러 컨테이너를 사용하는 애플리케이션을 쉽게 관리할 수 있도록 도커 컴포즈(Docker Compose)라는 도구를 제공

 - 도커와 도커 컴포즈를 통해 여러 애플리케이션과 미들웨어의 의존관계를 간결한 코드로 관리할 수 있다.

 - 도커 스웜(Docker Swarm)

    - 여러 컨테이너를 관리할 수 있는 도구

    - 컨테이너 증가, 감소는 물론이고 노드의 리소스를 효율적으로 활용하기 위한 컨테이너 배치 및 로드 밸런싱 기능 등 실용적인 기능을 갖추고 있다.

    - 배포 시에도 롤릴 업데이트가 가능해 운영 면에서도 장점이 많다.

 - 여러 서버에 걸쳐 있는 여러 컨테이너를 관리하는 기법을 컨테이너 오케스트레이션(container orchestration)이라고 한다.


운영 환경에서 빛을 발하는 도커

도커의 신뢰성에 대한 의문

 - 전 세계 운영 환경에 도입됐으면 확실히 주류에 편입되고 커뮤니티의 성숙과 함께 신뢰성을 인정 받음

성능 면에서의 우려

 - 스케일 아웃이 쉽다는 장점이 있음에도 오버헤드는 매우 적음

현실적으로 운영이 가능한지에 대한 우려

 - 운영에 도움을 주기 위한 여러 도구가 있음

 - ex) GCP : 쿠버네티스 기반의 구글 쿠버네티스 엔진(GKE), AWS : 아마존 엘라스틱 컨테이너 서비스(ECS), 애저 : 애저 컨테이너 서비스