logoRawon_Log
홈블로그소개

Built with Next.js, Bun, Tailwind CSS and Shadcn/UI

Docker

Docker - 가상화 기술

Rawon
2025년 9월 4일
목차
서버
가상화
컨테이너 가상화
하이퍼바이저
Docker
컨테이너 실행 실습

목차

서버
가상화
컨테이너 가상화
하이퍼바이저
Docker
컨테이너 실행 실습

서버

서버라는 단어는 IT 산업에서 흔히 접할 수 있는 용어 입니다.

서버를 정의하면 “하드웨어와 하드웨어에서 실행 중인 소프트웨어” 입니다.

Serve, Service, Serving 즉, 어떤 요청에 대한 결과를 제공하는 것을 서버라고 할 수 있습니다.

서버는 어떤 소프트웨어가 실행 중인지에 따라 다양하게 분류할 수 있습니다.

  • 파일 서버
    • 파일 업로드 및 다운로드
  • DB 서버
    • 데이터 조회 및 입출력
  • 웹서버
    • 클라이언트가 웹 브라우저를 통해 http 요청을 보내면 정적인 웹 페이지를 제공해주는 서버
  • 웹 애플리케이션 서버(WAS)
    • 백엔드 애플리케이션을 실행하는 서버

가상화

도커는 컨테이너 가상화라는 새로운 기술의 가상화와 관련이 있습니다.

최근에는 하이퍼바이저 가상화 기술보다 선호되는 기술인데, 이유는 상대적으로 더 가볍고 빠르기 때문입니다.

예를 들어 웹 서버 구동시간을 비교해보면 하이퍼바이저 가상화가 60s가 걸리는데 반해 도커(컨테이너 가상화)는 3s 밖에 걸리지 않습니다.

가상화 기술은 큰 서버를 나눠서 사용할 수 있는 기술을 의미하며,

하이퍼바이저를 사용한 가상머신 기술을 사용하면 각각 Guest OS가 독립적인 커널을 가지기 때문에 실행시간이 오래걸리고 하나의 Guest OS가 차지하는 오버헤드가 큽니다.

컨테이너 가상화는 커널이 자체적으로 제공하는 가상화 기술을 통해 가볍고 빠르다는 특징을 가지나 사용자가 직접 컨트롤 하기 어렵다는 단점이 존재합니다.

이러한 단점을 보완하기 위해 Docker 라는 S/W를 통해 커널의 컨테이너 가상화 기술을 편하게 사용할 수 있습니다.

컨테이너 가상화

  • 컨테이너 가상화는 커널 자체 격리 기술을 사용하여 커널 자체적으로 격리가 가능합니다.
  • 이렇게 격리된 각각의 공간을 컨테이너 라고 합니다. 즉, 모든 컨페이너가 하나의 커널을 공유합니다.
  • Host OS의 커널을 그대로 사용하기에 하이퍼바이저보다 오버헤드가 적습니다.
  • 즉, 하드웨어 리소스 사용요청이 효율적으로 이루어지며, 빠른 부팅이 가능합니다.

하이퍼바이저

  • 하이퍼바이저는 하이퍼바이저를 통해 격리
  • Guest OS, Host OS가 별도로 구성되어 있으며, 오버헤드가 증가합니다.

Docker

도커는 2013년 최초로 공개된 오픈소스 소프트웨어로, 컨테이너 가상화 기술을 사용하기 위한 도구(컨테이너 플랫폼) 입니다.

도커는 컨테이너 엔진, 컨테이너 런타임으로 구성되어 있으며, 각각의 역할은 다음과 같습니다.

  • 컨테이너 엔진 : 사용자의 요청을 받아 컨테이너 관리 역할
  • 컨테이너 런타임 : 직접 커널과 통신하며, 실제 격리된 공간을 만드는 역할

도커는 클라이언트-서버 모델 (도커 데몬 또는 dockerd) 로 실행됩니다.

  • 클라이언트에서 사용자 명령을 docker daemon(서버) 로 전달하고
  • docker daemon은 컨테이너를 관리하며, 클라이언트로 결과를 전달하게 됩니다.
  • 이때, https://docs.docker.com/engine/api/v1.41 에 정의된 api 문서와 같은 양식으로 도커 엔진에 명령을 보내게 됩니다.

다만, 사용자가 일일히 api를 확인하고 api에 맞게 명령을 보내기 어렵기 때문에 Docker에서 Docker CLI 를 클라이언트 툴로 제공합니다.

이 CLI는 사용자가 명령어를 입력하면 서버 API 양식에 맞게 만들어서 전달하며, 이를 통해 서버(docker demon)과 손쉽게 통신할 수 있습니다.

컨테이너 실행 실습

nginx 웹서버 컨테이너 실행 및 컨테이너가 제공하는 웹사이트 접속해보기

docker
docker version   // client, server의 버전 및 상태 확인     

docer info    // 플러그인, 시스템 상세정보 확인

docker --help    // 메뉴얼 확인
docker container --help

docker run (실행옵션) 이미지명    // 컨테이너 실행

docker rm 컨테이너명 또는 ID     // 컨테이너 삭제

docker run -p 80:80 --name hellonginx nginx
// 위 명령어 실행 시 cli가 명령어를 컨테이너 실행 API에 맞게 만들어 docker demon에 전달
// docker demon은 요청을 분석하고 컨테이너 런타임을 통해 컨테이너 생성
// localhost에 접속하면 컨테이너에서 실행 중인 Nginx 프로세스에서 요청을 전달받아 웹페이지 제공

위와 같이 컨테이너를 생성해서 프로세스를 실행시키면 디스크나 네트워크, 메모리, CPU 같은 공간이 완전 격리된 공간에서 실행시킬 수 있습니다.

하이퍼바이저와 비교했을 때, 단순한 명령어 한줄로 빠르게 웹서버를 구성할 수 있다는 장점이 있습니다.

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗

https://inf.run/CigvZ