[Docker] 우아한Tech talk 리뷰 - 검프의 Docker 이론편

Hoon·2022년 8월 23일
0

Docker

목록 보기
8/13
post-thumbnail

본 포스트는 이 영상을 기반으로 작성하였습니다.

다룰내용

  • 도커란?
  • 도커 엔진이란?
  • 도커 스웜이란?
  • 도커 컴포즈란?

목표: 위의 내용을 얕게 다룸.

도커이전. 가상화

도커란? 컨테이너 기반 가상화 도구
가상화란?

  • 등장 배경: 성능이 정말 좋은 서버를 구하고 쇼핑몰 사이트를 운영한다. 하지만 유저수가 적어서 리소스가 남는다. 따라서 새로운 반려동물 사료 플랫폼을 구동하려고 하지만 기존 서비스와 충돌이 일어나 사용하지 못한다. 여기서 서버의 성능을 나눠서 사용할 수 없을까라는 의문이 생기고 가상화가 나오게 되었다.
  • 서버 가상화: 하나의 물리적 서버 호스트에서 여러개의 서버 운영 체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍처
  • 하이퍼바이저: 서버 가상화를 구현해주는 기술. 하이퍼바이저는 가상화 기술을 통해 여러개의 게스트 운영체제를 하나의 호스트 운영체제 위에서 사용할 수 있게 된다. 만들어진 운영체제는 가상머신이라는 단위로 구별된다.)
  • 대표적 툴: VMware, virtual box.
  • 단점: 성능 손실 발생.(host os를 거쳐야 하기 때문). 이미지 거대화(가상머신은 게스트 OS에 커널 등을 포함하기 때문에 크기가 큼)
  • 해결을 위해 컨테이너 기반 가상화가 나왔다.
  • 도커 엔진 위에 컨테이너가 할당된다. 컨테이너에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행파일만 존재해서 이미지의 용량이 줄어듬.
  • 컨테이너를 왜 써야할까? 이미지의 실행, 배포가 빨라지니까

컨테이너?

  • 기술적: 이미지의 목적에 따라 생성되는 프로세스 단위의 격리 환경. 프로세스의 생명 주기를 관리
  • 컨테이너는 파일시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간을 가진다. 커널을 통해 필요한 자원을 가져온다. 프로세스는 OS 위에서 실행되고 이를 Host OS로 보자.
  • Host OS 입장에서는 컨테이너를 프로세스로 본다.
  • 컨테이너를 왜 써야할까?
    • Host와의 격리를 통해 독립된 개발 환경을 보장
    • 프로세스를 컨테이너 단위로 사용
    • 프로세스의 관리, 확장에 용이
  • 컨테이너를 도커엔진을 통해 관리.

도커엔진?

도커엔진: 유저가 컨테이너를 쉽게 사용할 수 있게 하는 주체

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

명령어를 쳤을 때 flow

1. user가 docker 명령어로 도커 엔진에게 명령어를 보낸다.
2. 도커 클라이언트는 도커 데몬 API를 호출한다.
3. 도커 데몬(컨테이너 관리 주체)은 명령어에 해당하는 작업을 실행하고 결과를 사용자에게 출력한다.

  • 도커 소켓?
    • 도커 소켓은 /var/run/docker.sock에 위치해 있다.
    • 메인 도커 데몬과 통신하기 위해 사용된다. 도커 API 의 entry point이다. CLI 환경에서 도커 명령어를 실행하는데 사용된다.

컨테이너가 많아져서 자원이 부족하다면?
1. scale up

  • 확장성이나 비용 측면에서 좋지 않다.
  1. scale out
  • 새로운 서버를 추가. 클러스터로 묶는 경우가 많다.

    클러스터?: 각기 다른 서버들을 하나로 묶어 하나의 시스템같이 동작하게 하는 것
  • 도입이 어렵다. 스케줄러, 로드밸런서 등 처리할 작업이 많다.

도커 스웜?

  • 스웜 모드: 마이크로 서비스 아키텍처의 컨테이너를 다루기 위한 클러스터링 기능에 초점. 필요에 따라 유동적으로 컨테이너 수 조절. 컨테이러로의 연결을 분산하는 로드밸런싱 기능을 자체적으로 지원.
  • 구조: 매니저노드, 워커노드로 나눈다. 워커노드는 실제로 컨테이너가 생성되고 관리되는 도커서버이고 매니저노드는 워커 노드를 관리하는 도커 서버이다. 매니저 노드는 워커 노드의 역할도 한다. 매니저 노드는 다중화 하는 것이 좋다. 매니저 노드의 부하를 분산하고 특정 매니저 노드가 다운되었을 때 정상적으로 스웜 클러스터를 유지하기 위해서.
  • 예시)
  • 서비스?
    일반적인 도커 명령어의 제어단위는 컨테이너.
    도커스웜에서 제어 단위는 서비스
    서비스는 같은 이미지에서 생성된 컨테이너의 집합

    함께 생성된 서비스를 Replica라고 한다.
    예) SpringBoot, Nginx 두 개의 서비스를 정의.

    중간에 있는 워커 노드가 장애가 발생하면 다른 노드에 새로운 테스크를 생성한다.

스웜모드?

제공하는 기능

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

스웜 모드를 왜 써야할까?

  • 서비스의 확장과 관리를 편하게 하기 위해.

도커 컴포즈?

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

  • 플로우
  • 구조

도커 컴포즈를 왜 써야할까? 컨테이너의 생성을 편리하게 하기 위해.

Reference

0개의 댓글