Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

Hyen Dev

Docker 란? 본문

카테고리 없음

Docker 란?

hi_dev 2024. 7. 31. 19:34

Docker란?

 

Docker란 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

가상화, 컨테이너, Docker에 대해 차례대로 알아보려고 한다.


가상화

가상화란 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이션에서 사용할 수 있도록 제공하는 것을 말한다.

 

가상화 이전에는 각 OS마다 전용 물리적 서버 하나에서 실행해야 했기 때문에, 여러 OS를 수행해야 하는 경우에는 그만큼 별도의 서버가 필요했다. 그 말은 내가 서비스를 Window, Mac, Ubuntu 환경에서 사용하거나 개발하고 싶다면 그만큼의 물리적 서버를 여러개 마련해야했다.

하지만 가상화 이후에는, 운영체제와 하드웨어가 분리되어 여러 운영체제를 하나의 물리적 머신에서 동시에 실행할 수 있다.


가상화 종류

1. OS Virtualization

  • Host OS 위에 Guest OS 전체를 가상화 하는 방식이다. 일반적으로 VMWare, VirtualBox와 같은 소프트웨어가 많이 사용된다.
  • 물리적 서버의 OS 위에 여러 다른 독립적인 OS가 가상적(virtually)으로 돌아가는 구조 -> 하나의 물리적 서버에서 실행되고 있지만 가상적으로서 완전한 독립적 OS로 운영
  • 장점
    • 운영체제 전체를 가상화 시키므로 자유도가 높다
    • 물리적 서버의 리소스를 더 효율적으로 사용할 수 있다. 한 서버에 하나의 OS만 운영을 하는 경우 해당 OS가 서버의 모든 리소스를 항상 full로 사용하기 어려우므로 서버 리소스들이(예를 들어 CPU) idle 상태로 낭비되는 경우가 있다.
      • 하나의 서버에 여러 OS를 실행시키면 CPU를 idle 상태로 두지않고 필요한 OS나 서비스에 할당하여 리소스를 훨씬 효율적으로 사용할 수 있다.
  • 단점
    • Host OS + Guest OS로 인해 Guest OS가 전체 메모리 중 Host OS의 영역을 뺀 나머지 자원을 나눠서 공유하게 되므로 시스템에 부하가 많고 부팅시키는 과정이 있으므로 느려지게 된다
    • 기술적으로 너무 무겁다(heavy-weight) -> base OS와 가상화 OS 사이에 커널 시스템 호출을 연결 시켜주는 emulation layer가 필요하다.
    • 독립적인 OS를 실행시키는 것이기 때문에 booting 시간이 길 수 밖에 없으며 리소스를 많이 차지할 수 밖에 없다.

2. Container Virtualization

  • Host OS가 가진 리소스를 적게 사용하며, 필요한 프로세스만을 실행하는 방식이다.
  • 운영체제 전체가 아닌 최소한의 라이브러리와 실행 파일과 같은 도구만을 포함하여 가상화 생성 ->  일반 프로세스와는 다르게 컨테이너는 host 컴퓨터와 그 위에서 돌아가는 다른 프로세스들로부터 격리되도록 설계되어 있다.
  • OS 커널 위의 유저 공간(user space)에서 실행된다 -> 완전히 독립적인 운영체제를 가상화 하는 것이 아니라 독립적인 user space를 가상화
  • 장점
    • 훨씬 가볍기 때문에 빠르고 쉽게 독립적인 가상 환경을 실행시킬수 있다. -> docker는 emulator가 필요없이 그냥 일반적인 시스템 API interface를 사용한다.
    • docker image만 있으면 어디서든 쉽고 빠르게 test 환경, sandbox 환경 및 production 배포를 할 수 있다.
    • MSA(Micro Service Architecture)와 CI/CD에 아주 잘 어울리는 가상화 기술이다.
  • 단점
    • 완전히 독립적인 운영체제 가상화가 아니다 보니 보안적인 측면에서 약할 수 밖에 없다.
    • 독립적인 OS가 아닌 user space 가상화를 하는 형태이다 보니 운영체제가 전혀 다른 호스트에서는 실행을 시킬수가 없다. 예를 들어 Windows 를 linux 호스트에서 실행시킬수 없다.

Docker Container 란?

  • Docker는 가상화 컨테이너 기반의 오픈소스 플랫폼이다.
    • 가상화 컨테이너는 환경에 구애 받지 않고 애플리케이션을 실행할 수 있게 해준다.
    • 도커는 가상화 컨테이너 위에 애플리케이션 배포 엔진을 더함으로써 코드를 어디서든 빠르고 가볍게 실행시킬수 있는 기술을 제공한다.
  • 컨테이너 가상화는 새로운 기술이 아닌데, 도커가 핫한 이유는?
    • 도커는 요즘 널리 사용되는 MSA(Micro Service Architecture)와 CI/CD 구축을 위해 사용한다.
    • 실제로 docker는 한 컨테이너 당 하나의 application이나 프로세스를 실행하는 것을 권한다. MSA의 철학과 일맥상통 하는것이다.

Docker의 구조

Docker는 크게 다음과 같은 4가지 구조로 되어있다.

1. Docker client 와 server (server는 docker engine으로 불리기도 한다)
2. Docker image
3. Docker registries
4. Docker containers

Docker Client & Server

  • 도커는 클라이언트 와 서버 구조로 이루어저 있다. 클라이언트가 서버에 명령을 전달하고 서버가 실행시키는 구조이다.

Docker Image

  • Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것으로, "build" 부분에 해당한다.
  • Docker container에서 실행시키고 싶은 application을 docker 이미지로 빌드해서 실행시키게 된다.

Docker registries

  • Docker registires는 docker 이미지를 저장하는 repository라고 보면 된다.
  • Source code를 github에 저장하여 관리하듯 docker 이미지는 dockerhub 같은 docker registries에 저장한다고 생각하면 된다.
  • Github가 마찬가지로 public registry 가 있고 private registry가 있다.

Docker Containers

  • Docker container에서 docker 이미지가 실행된다. 즉 docker 이미지를 실행시키는 가상화 공간 이다.
  • Docker container는 하나 혹은 그 이상의 프로세스를 실행 시킬수 있다 (하지만 하나의 프로세스만 실행시키는 것을 권장).

Docker Compose And Swarm

  • Docker에서는 여러 docker container들로 이루어진 stack이나 cluster를 관리 하는 서비스도 제공하는데 바로 docker compose 와 docker swarm이다.
  • Docker compose는 복수의 docker container들을 모아서 종합적인 application stack을 정의 하고 운영할수 있도록 해주는 서비스이다.
    • Compose 파일을 사용하여 전체적인 application 서비스를 설정한후, application을 이루고 있는 각각의 컨테이너들 (예를 들어, web 서버 컨테이너, api 서버 컨테이너 등등)을 따로 실행시킬 필요 없이 한번에 생성하고 실행할 수 있도록 해준다.
    • Docker swarm은 docker containers 들로 이러우진 cluster를 관리할수 있도록 해주는 서비스이다. 즉 docker container를 위한 clustering tool 이다.