티스토리 뷰

인프라/Docker

도커

copcat 2023. 5. 6. 17:36

Docker란?

도커는 컨테이너 기술을 기반하여 만든 오픈소스 가상화 플랫폼입니다. (도커 ≠ 컨테이너)

컨테이너?

사전적 의미

  • 화물을 담아 나르기 위해 주로 쓰는, 쇠로 만들어진 큰 상자.

기술적 의미

  • 이미지 목적에 따라 생성되는 프로세스 단위의 독립 환경입니다.
  • 환경을 제공하며 프로세스의 생명주기를 관리합니다.

왜 컨테이너를 사용할까요?

HOST와 격리를 통하여 독립된 개발환경을 보장하기 위해 사용합니다.

컨테이너의 역사

FreeBSD Jail

오픈소스 Unix인 FreeBSD의 기술입니다.

특징

  1. 프로세스의 구획화
  2. 네트워크의 구힉화
  3. 파일 시스템의 구획화

(구획이란? 경계를 갈라 정하는 것 또는 그 구역)

Solaris Containers

Oracle의 상용 Unix인 Solaris 의 기술입니다.

특징

  1. Solaris 존 기능
  2. Solaris 리소스 매니저 기능

Linux Containers (LXC)
Linux 커널의 컨테이너 기능을 이용하기 위한 툴이나 API를 제공합니다.


가상화??

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

이런 서버 가상화를 구현해주는 기술이 바로 Hypervisor 이라고 합니다.

하이퍼바이저는 하나의 호스트 OS 위에 여러 개의 게스트 OS를 사용할 수 있게 도와주고 또한 이렇게 생성된 게스트OS는 각각 가상머신이라는 단위로 구별됩니다.

하이퍼바이저는 게스트 운영체제를 실행하고 관리할 수 있게끔 돕는 역할과 호스트 머신들이 자원들을 VM들에게 분배할 수 있도록 도와주는 역할을 합니다.

위 그림을 보면 하이퍼바이저와 컨테이너의 방식은 유사해보이지만 큰 차이는 아래와 같습니다.

VM 은 호스트 os 위에 게스트 os 가 구동되기 때문에 이미지로 만들 때 무겁고 가상화 작업에서는 무조건 하이퍼바이저를 거쳐야합니다.

컨테이너는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 가볍고 이식성이 좋습니다.

다시 강조하지만 컨테이너 ≠ 도커는 아닙니다.


도커의 기능

  • 이미지를 만듬 (Build)
  • 이미지를 공유 (Ship)
  • 컨테이너를 작동 (Run)

이미지를 만드는 기능 - Build

애플리케이션의 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어 , OS나 네트워크 설정 등을 하나로 모아서 이미지로 만듭니다.

즉, 실행환경에서 움직이는 컨테이너의 바탕이 됩니다.

도커에서는 하나의 이미지 - 하나의 애플리케이션 만 넣어두는 것을 권장합니다.

이미지는 겹쳐서 사용할 수 있기 때문에 OS 용 이미지에 웹 애플리케이션용 이미지를 겹쳐 다른 새로운 이미지 또한 만들 수 있습니다. ( 변경한 부분(이미지 레이어) 차분으로 관리합니다)

이미지를 공유하는 기능 - Ship

이미지는 Docker 레지스트리(ex. docker hub) 에서 공유할 수 있습니다.

깃허브와 연계하여 dockerfile을 관리하고 자동으로 docker 이미지를 생성하여 hub 에 공개하는 것도 가능합니다.

컨테이너를 작동시키는 기능 - Run

Linux 상세어 컨테이너 단위로 서버 기능을 작동시킵니다.

vm 같은 경우 서버 기능을 실행시키려면 os 의 실행 부터 해야하기 때문에 오래 걸리지만

도커는 이미 동작되는 os 상에서 프로세스를 실행시키는 것과 같은 속도로 빨리 실행 시킬 수 있습니다.

하나의 Linux 커널을 여러 개의 컨테이너에서 공유하고 있습니다.

Linux 커널 기능 기술 (namespace, cgroups 등) 을 사용하여 컨테이너를 독립된 공간으로서 관리할 수 있습니다.


Docker 컴포넌트

Docker Engine

도커의 이미지를 생성하고 컨테이너를 가동시키기 위한 핵심 기능입니다.

Dokcer Registry

도커 이미지를 공개 및 공유하기 위한 레지스트리 기능입니다.

실제 도커 공식 레지스트리 서비스인 도커 허브도 이 도커 레지스트리를 사용하고 있습니다.

Docker Compose

여러 개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여, 관리를 간단히하는 기능입니다.

Docker Machine

더이상 지원되지 않습니다. https://docs.docker.com/machine/

Docker Swarm

여러 도커 호스트를 클러스터화 하기 위한 툴입니다. → 쿠버네티스와 비슷


도커의 작동 구조

도커는 Linux 커널의 기술이 베이스로 되어 있습니다.

컨테이너를 구획화하는 장치 (namespace)

도커가 컨테이너라는 독립된 환경을 만들고 그 컨테이너를 구획화하여 어플리케이션의 실행 환경을 만들 수 있도록 하게끔 해준 기술입니다.

개념

한 덩어리의 데이터를 이름을 붙여 분할함으로써 충돌 가능성을 줄이고, 쉽게 참조할 수 있게 함

독립된 환경

  • PID
  • Network
  • UID
  • MOUNT
  • UTS
  • IPC

릴리스 관리 장치 (cgroups)

도커가 물리 머신의 자원을 여러 컨테이너가 공유하여 작동할 수 있게 하게끔 해준 기술입니다.

→ 예를 들면, 어떤 컨테이너가 호스트 os 의 자원을 모두 사용해 다른 컨테이너의 영향을 주는 일을 막아줌.

cgroups의 부모자식 관계에서는 자식이 부모의 제한을 물려받습니다.


네트워크 구성

서버의 물리 NIC가 docker0 이라는 가상 브리지 네트워크로 연결됩니다. (docker0 은 기본 값입니다)

도커 컨테이너와 외부 네트워크가 통신을 할 때는 가상 브리지 docker0 과 호스트 os 의 물리적 NIC에서 패킷을 전송하는 장치가 필요합니다. → NAPT 기능 사용


도커 이미지의 데이터 관리 장치

데이터를 복사하고 변경이 없다면 그 복사는 쓸데 없이 점점 공간 낭비가 발생하는 문제가 있습니다.

하지만 도커는 복사를 요구받아도 바로 복사하지 않고 원래 데이터를 그대로 참조시켜, 원본 또는 복사 어느 쪽에 수정이 가해진 시점에 비로소 새로운 빈 영역을 확보하고 데이터를 확보합니다.

Copy on Write 라고 부릅니다.

위 방식으로 도커는 컨테이너의 이미지를 관리합니다.

이미지를 관리하는 스토리지 디바이스

  • AUFS
  • Btrfs → 롤백, 스냅샷 기능
  • Device Mapper
  • OverlayFS

📍 궁금했던 것들

왜 하필 도커?

  • 주관적인 생각

    1. 편리성

    2. 클라우드와 친화적

    3. 거대한 커뮤니티

    4. 이식성

    5. 등등..

      많은 장점들로 하여금 사용하지 않았을까요?

Linux 커널 기능 - namespace, cgroups ?

  • 구글링

    커널 →컴퓨터 자원을 관리

    namespace ?

    → 프로세스를 실행할 때 시스템의 리소스를 분리해서 실행할 수 있도록 도와주는 기능

    쉽게 말해 한 덩어리 데이터를 네이밍하여 서로 충돌을 방지하고 쉽게 참조할 수 있게 해주는 기능입니다.

    cgroups ?

    → 프로세스들이 사용할 수 있는 컴퓨터 자원을 제한하고 격리시켜주는 기능

    제한 가능한 자원리스트

    • 메모리
    • CPU
    • 네트워크
    • 장치
    • I/O
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함