랑아
article thumbnail

Docker

Docker 핵심 키워드

컨테이너

  • 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자

이미지

  • 실행되는 모든 컨테이너는 이미지로부터 생성됨
  • 이미지는 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿으로, 이를 이용해 즉시 컨테이너를 만들 수 있음
  • 이미지를 이용해 여러 개의 컨테이너를 생성할 수 있으며, 이를 이용해 애플리케이션의 수평 확장이 가능함
  • 이미지는 기본 이미지(base image)로부터 (마치 git을 사용하는 것처럼) 변경 사항을 추가/커밋해서 또 다른 이미지를 만들 수도 있음
    • 스프링부트 기반의 애플리케이션을 이미지로 만들고 싶은 경우, 스프링부트 초기 세팅 이미지를 기본 이미지로 삼고 내가 만든 애플리케이션을 추가해 넣고, 이미지화할 수 있음

레지스트리

  • 이미지는 레지스트리에 저장됨
  • 대표적인 이미지 레지스트리로는 Docker Hub, Amazon ECR이 있음
  • 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 존재하지 않는다면, 기본 레지스트리로부터 다운로드하게 됨



컨테이너와 VM의 비교

  • 컨테이너 기술과 가상 머신(VM)은 둘 다 프로세스, 네트워크, 파일 시스템을 격리할 수 있다는 장점을 공유하지만, 작동원리는 많이 다름
  • VM은 VM을 만들고 실행하는 과정이 많은 컴퓨팅 자원을 필요로 하지만, 도커는 한 호스트 컴퓨터에 여러 개의 컨테이너를 띄워도 크게 컴퓨터에 무리가 가지 않음
  • Docker Hub Registry를 통해 이미지를 살펴보면, 도커 이미지는 (운영체제 이미지도 존재하지만) 보통 애플리케이션 단위로 만들어져 있음을 알 수 있는데, 반면 VM을 사용하기 위해서는 해당 VM 위에 운영체제(OS, Operating System)를 설치해야 하는 과정을 반드시 거치게 되어 있음
  • 도커 컨테이너에는 OS를 포함하고 있지 않으며, 도커라는 플랫폼 위에 컨테이너들이 올라가 있고, 그 아래 호스트 OS가 존재함
    • 각 컨테이너는 호스트 OS의 커널(Kernel, 시스템 콜과 같이 OS의 핵심 기능을 구현한 프로그램)을 공유하고 있음
    • 도커는 애플리케이션을 컨테이너 화해서 실행하는 데에 주목적이 있으므로, 특별히 컨테이너에 OS를 올려서 사용하지 않음
    • 호스트 OS의 입장에서 컨테이너 하나는 프로세스 하나에 불과함

Docker Hub에 존재하는 각종 OS 이미지란?

  • 잘 알려진 리눅스 배포판인 우분투, CentOS 등은 결국 동일한 리눅스 커널 위에서 만들어진 것으로, 각자가 고유의 디렉토리 구조, 패키지 시스템(apt, yum), 쉘(bash, zsh) 등을 사용했을 뿐
  • OS 이미지는 컨테이너 내 애플리케이션 구성의 편의를 위해 존재하는 이미지
  • 우분투, CentOS 이미지를 사용한다고 해도 결코 컨테이너에 커널 수준의 OS가 올라가지 않음
  • 하이퍼바이저는 VM을 생성하고 구동하는 소프트웨어를 의미함
    • 하이퍼바이저에는 유형이 다양하게 존재하며, VMware, VirtualBox와 같은 프로그램이 하이퍼바이저
  • 윈도우나 macOS는 리눅스가 아닌데, 어떻게 컨테이너 안에서 리눅스 기반으로 작동하는 것인가
    • 윈도우나 macOS는 근본적으로 리눅스 커널을 쓰고 있지 않으므로, 해당 운영체제의 경우 리눅스 커널을 VM의 형태로 실행시키는 하이퍼바이저(Hyper-V, LinuxKit, HyperKit)를 자체적으로 구동함
    • 윈도우용 또는 macOS용 도커는 하이퍼바이저 위의 리눅스 커널을 사용하는 것
    • 윈도우의 경우 WSL를 통해서도 리눅스 커널을 사용할 수 있음
    • 윈도우용 도커는 윈도우 커널을 사용한 윈도우 전용 컨테이너를 실행할 수 있는 기능을 제공하며, 컨테이너는 커널을 공유하므로, 윈도우 커널을 사용하는 컨테이너는 리눅스용 도커에서 사용할 수 없음

'CS > 데이터베이스' 카테고리의 다른 글

Cloud - 배포 자동화 1  (1) 2023.06.19
Cloud - 배포 컨테이너 3  (1) 2023.06.19
Cloud - 배포 컨테이너 1  (0) 2023.06.18
Cloud - 운영 환경 구성 5  (0) 2023.06.18
Cloud - 운영 환경 구성 4  (0) 2023.06.17
profile

랑아

@RangA

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!