Docker

가비·2020년 11월 9일
0

Docker란? Docker는 가상화 기술로 가상화 컨테이너에 application 배포를 자동화 시켜주는 오픈소스 엔진이다.
container 가상화 환경 위에 application 배포 엔진을 더함으로써 사용자의 코드를 어디서든 빠르고 가볍게 실행시킬 수 있는 기술을 제공한다. MSA(Micro Service Architecture) 및 CI/CD와 잘 조화되고 한 컨테이너 당 하나의 application이나 프로세스를 실행하는 것을 권한다.

Hypervisor 가상화 vs Container 가상화

Hypervisor

  • 물리적인 서버에서 하나 혹은 그 이상의 독립적인 운영체제가 돌아가는 구조로 물리적 서버의 OS위에 다른 독립적인 OS가 가상적(virtually)로 돌아가는 구조이다.
  • 각각의 OS는 서로에 대해 알지 못하며 base OS(물리적 서버의 OS)도 알지 못한다.
    👉 하나의 물리적 서버에서 실행되고 있지만 가상적으로 완전한 독립적 OS로 운영되는 것.

장점

  • 물리적 서버의 리소스를 효율적으로 사용 할 수 있다.
    👉 한 서버에 하나의 OS만 운영 할 경우 해당 OS가 서버의 모든 리소스를 항상 full로 사용하기 어려우므로 서버 리소스(ex.CPU)들이 idle한 상태로 낭비될 수 있기때문에 하나의 서버에 여러 OS를 실행 시키면 CPU를 idle한 상태로 두지 않고 필요한 OS나 서비스에 할당 될 수 있다.
    👉 그러므로 고급 사양의 서버에 여러 가상화 OS들을 운영하는 것이 저-중급 사양의 여러 서버를 운영하는 것보다 훨씬 효율적이다.

단점

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

Container

  • OS의 커널 위의 유저 공간(user space)에서 실행된다. 즉, 완전히 독립적인 운영체제를 가상화 하는 것이 아니라 독립적인 user space를 가상화 한다고 생각하면 쉽다.
    👉 하나의 호스트 서버에서 여러 독립적인 useer space 인스턴스들을 가상적으로 실행할 수 있게 되는 것.

장점

  • hypervisor 가상화보다 훨씬 가볍기 때문에 쉽고 빠르게 독립적인 가상 환경을 실행시킬 수 있다.
  • hypervisor는 base OS와 가상화 OS 사이에 커널 시스템 호출을 연결 시켜주는 emulation layer가 필요한데 docker는 emulator가 필요없이 일반적인 시스템 API interface를 사용한다.
    👉 docker image만 있으면 어디서든 쉽고 빠르게 test 환경, sandbox 환경 및 production 배포를 할 수 있다.

단점

  • 완전히 독립적인 운영체제 가상화가 아니기 때문에 보안적인 측면에서 hypervisor 보다 약할 수 밖에 없다.
  • 독립적인 OS가 아닌 user space를 가상화 하는 형태이다 보니 운영체제가 전혀 틀린 호스트에서는 실행 할 수 없다.
    👉 Windows를 linux 호스트에서 실행 할 수 없다.

Docker 구조

  • Docker client와 server(docker engine)
  • Docker image
  • Docker registries
  • Docker containers

Docker client와 sever

  • 클라이언트가 서버에 명령을 전달하고 서버가 실행시키는 구조이다.
  • docker binrary 커맨드가 docker client이고 dockerd가 docker daemon 혹은 docker engine이다.
  • docker engine과 interact 하기 위한 Restful API도 제공된다.
  • 클라이언트와 서버는 동일한 호스트 안에서 운영 될 수 있으며 서로 다른 호스트에서 운영 될 수도 있다.

Docker image

  • docker의 life cycle에서 docker image는 build 부분에 해당된다.
  • docker container에서 실행 시키고 싶은 application을 docker image로 빌드해서 실행시키게 된다.

Docker registries

  • docker image를 저장하는 repository 이며 public registry, private registry가 있다.

Docker containers

  • docker image를 실행시키는 가상화 공간으로 하나 혹은 그 이상의 프로세스를 실행 시킬 수 있다.

Docker compose & Swarm

  • 여러 컨테이너들로 이루어진 stack이나 cluster를 관리하는 서비스

compose

  • 복수의 컨테이너들을 모아 종합적인 application stack을 정의하고 운영할 수 있도록 해주는 서비스.
  • compose 파일을 사용하여 전체적인 application 서비스를 설정한 후 application을 이루고 있는 각각의 컨테이너들(ex.web 서버 컨테이너, api 서버 컨테이너)을 따로 실행시킬 필요 없이 한번에 생성하고 실행 할 수 있도록 해준다.

swarm

  • 컨테이너들로 이루어진 cluster를 관리할 수 있도록 해주는 서비스로 docker container를 위한 clustering tool이다.

0개의 댓글