TIL53 - Docker(1)

Kiyong Lee·2021년 11월 15일
0

목록 보기
8/12

Docker


1탄에는 Docker란 무엇인지
2탄에는 Docker실습에 대해 포스팅 할 예정입니다.

그 전에 아래 내용에 대해 읽어보고 오면 더 이해가 잘 될 거라 생각합니다

커널
Cluster & Swarm
User Space


1. DOCKER란 무엇일까?

  • 가상화 컨테이너에 Application 배포를 자동화 시켜주는 오픈소스 엔진
    다만, Container Virtualization은 이미 Docker 이전부터 개발되었음
    (Docker가 개발한 게 아님)

  • 컨테이너 가상화 실행환경위에 Application 배포 엔진을 더함으로써
    사용자 코드를 어디서든 빠르게 실행시킬 수 있는 기술

  • 하나의 컨테이너당 한 개의 Application, Process 실행을 권장하며
    이는, MSA철학과 일치한다.


2. Hypervisor & Container 가상화



왼쪽이 Container, 오른쪽이 Hypervisor

2-1. Hypervisor

  • 물리적인 서버에서 하나 혹은 그 이상의 독립적인 OS가 돌아감

  • 물리적 서버의 OS위에 여러 다른 독립적인 OS가 가상적으로 돌아가는 구조

  • 독립적이기 때문에 서로 알지 못하며, baseOS(물리적서버 OS)도 알지 못함
    하나의 물리적 서버에서 실행되고 있지만, 가상적으로서 완전한 독립된 OS로 운영

  • 가장 큰 장점으로, 물리적서버의 리소스를 더 효율적으로 사용가능하다는 것이다.
    한 서버에 하나의 OS만 운영하는 경우, 해당 OS가 서버의 모든 리소스를
    항상 full로 사용하기 어려우므로 서버 리소스들이 idle 상태로 낭비되는
    경우가 있다.

  • 다만, 독립적인 OS를 실행시키는 것이기 때문에 booting 시간이 길며,
    리소스를 많이 차지할 수 밖에 없다.
    그래서 기술적으로 많이 무겁다


2-2. Container 가상화

  • OS의 커널위의 User-Space에서 실행된다.
    즉, 독립적인 운영체제가 아닌 독립적인 User-Space를 가상화하여
    하나의 호스트 서버에서 여러 독립적인 User-Space Instance들을 가상적으로 생성

  • 운영체제가 아닌 User-Space를 가상화하기 때문에 Hypervisor보다 가볍고 빠르다.
    Hypervisor는 BaseOS와 가상화OS 사이의 커널시스템 호출을 연결시켜주는
    emulation layer가 필요한데,
    Docker는 Hypervisor처럼 emulator 필요없이 그냥 일반적인 시스템 API Interface 사용

  • 다만, Docker는 독립적인 OS가 아닌 User-Space를 가상화 하다보니
    OS가 다른 호스트에서는 실행시킬 수 없다
    그래서 보안측면에서는 Hypervisor보다 약하다.


3. Docker의 구조

Docker는 크게 4가지 부분으로 되어있다

  • Docker Client와 Server(Server는 Docker Engine이라고도 불림)
  • Docker Image
  • Docker registries
  • Docker Containers

3-1. Docker Client & Server

Docker는 클라이언트와 서버구조로 이루어져있으며,
클라이언트가 서버에 명령을 전달하고 서버가 실행시키는 구조이다.

Docker Binary 커맨드가 Docker Client이고, Dockerd가 Docker Daemon 혹은
Docker Engine이다.

Dokcer Engine과 Interact하기 위한 RESTful API 제공한다.
클라이언트와 서버는 동일한 호스트 안에서 운영될 수 있으며, 서로 다른 호스트에서 운영될 수 있다.


3-2. Docker Image

그 전에, Docker Layer에 대해 간단하게 알아야 한다.

Docker Layer란 기존 이미지에 추가적인 파일이 필요할 때,
다시 다운받는 게 아닌 파일을 추가하기 위한 개념이다.
여러개의 Layer를 묶어 하나의 파일 시스템으로 사용한다.

Docker Image란 서비스운영에 필요한 서버 프로그램, 소스코드라이브러리,
컴파일된 실행파일을 묶은 형태로 특정 컨테이너에 필요한 모든 파일과 설정들을 지닌 것을 말한다.

Docker의 Life Cycle에서 Docker Image는 "Build" 부분에 해당한다.

Docker Container에서 실행시키고 싶은 Application을 Docker Image로 빌드해서 실행


3-3. Docker Registry

Docker Image를 저장하는 Repository로 보면 된다.

내 코드를 github에 저장하여 관리하듯, Docker Image는 dockerhub같은
Docker registries에 저장한다.

github와 마찬가지로 Public/Private로 나뉜다.


3-4. Docker Containers

Docker Container에서 Docker Image가 실행된다.
즉, Docker Image를 실행시키는 가상화공간이다.

Docker Container는 하나 혹은 그 이상의 프로세스를 실행시킬 수 있는데,
하나의 프로세스만 실행하는 걸 권장한다.


3-5. Docker Compose And Swarm

Docker에서는 여러 docker container들로 이루어진 stack이나 cluster를
관리하는 서비스도 제공되는데, 이게 바로 Docker Compose와 Docker Swarm이다.

Docker Compose는 복수의 Docker Container들을 모아서
종합적인 Application stack을 정의하고, 운영할 수 있도록 해주는 서비스이다.

Compose 파일을 사용하여 전체적인 Application 서비스를 설정한 후
Application을 이루고 있는 각각 컨테이너(EX. Web컨테이너, API서버컨테이너 등)
들을 따로 실행시킬 필요없이 한 번에 생성하고 실행할 수 있도록 해준다.

Docker Swarm은 Docker Containers들로 이루어진 cluster를
관리할 수 있도록 해주는 서비스이다.
즉, Docker Container를 위한 Clustering

profile
ISTJ인 K-개발자

0개의 댓글