도커란?

컨테이너 기반 가상화 도구

가상화?

등장배경

서버의 성능을 나눠서 사용하고 싶어서

서버 가상화

하나의 물리적 서버 호스트에서 여러 개의 서버 운영 체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍처

하이퍼바이저

  • 서버 가상화 기술을 구현할 수 있게하는 소프트웨어
  • 가상 머신이라는 단위로 구별
  • 각 가상머신에는 여러 운영체제가 설치
  • 하이퍼바이저에 의해 생성되고 관리되는 운영체제를 게스트 운영체제라 부름

하이퍼바이저는 OS들에게 자원을 나누어주며 조율

OS들의 커널을 번역해서 하드웨어에 전달

Image From: digi hunch

단점

가상화 작업은 하이퍼바이저를 반드시 거쳐야 함 → 이미지 거대화, 무거워짐

컨테이너 기반 가상화

  • 프로세스 단위의 격리 환경
  • chroot, 네임스페이스, cgroup을 사용함
  • 이미지의 용량이 줄어듬
  • 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재
  • 성능 손실 거의 없음

컨테이너?

이미지의 목적에 따라 생성되는 프로세스 단위의 격리 환경

  • 프로세스의 생명 주기를 관리
why?
  • Host와의 격리를 통해 독립된 개발 환경을 보장
  • 프로세스를 컨테이너 단위로 사용
  • 프로세스의 관리, 확장에 용이

Docker Engine

유저가 컨테이너를 쉽게 사용할 수 있게 하는 주체

  • 컨테이너 관리
  • 이미지 관리
  • 볼륨 관리
  • 네트워크 관리

클러스터

각기 다른 서버들을 하나로 묶어 하나의 시스템 같이 동작하게 하는 것

도커 스웜 - 스웜 모드

MSA의 컨테이너를 다루기 위한 클러스터링 기능에 초점

  • 필요에 따라 유동적으로 컨테이너 수를 조절(개발자가 직접)
  • 컨테이너로의 연결을 분산하는 로드밸런싱 기능을 자체적으로 지원

구조

  • 매니저 노드 - 워커노드를 관리하기 위한 도커 서버, 워커 노드의 역할도 포함, 다중화하면 좋음
  • 워커 노드 - 실제로 컨테이너가 생성되고 관리되는 도커 서버

클러스터 구축

클러스터에 서비스 시작 가능

서비스

도커 스웜의 제어 단위 서비스는 같은 이미지에서 생성된 컨테이너의 집합

스웜 모드

  • 클러스터 관리
  • 서비스 관리
  • 네트워크 관리
  • 노드 관리

why?

서비스 확장/관리를 편하게 하기 위함

도커 컴포즈

여러개의 컨테이너를 하나의 서비스로 정의 스웜 모드와 비슷

  • 도커 엔진 밖에 위치

플로우

  1. docker compose + compose.yml 파일 작성
  2. compose up
  3. 컨테이너 생성

구조

  • 프로젝트 - yml이 위치하는 폴더, 직접 지정 가능
    • 서비스
      • 컨테이너
      • 컨테이너
    • 서비스
      • 컨테이너

why?

컨테이너의 생성을 편리하게 하기 위해

Ref.

테크톡 - 검프의 Dokcer 이론편