DevOps

[Docker] 01. 도커(Docker)란 ?

코딩 기록하는 애기 개발자 2025. 9. 21. 19:55

목차

    도커 (Docker)의 등장 배경

    서버의 운영 구조

    도커의 구조를 살펴보기 전, 서버를 운영하는 4가지 구조에 대해서 살펴보자.

    • Bare Metal : 하드웨어 위에 바로 운영체제를 설치하고, 그 위에로 바로 애플리케이션을 실행한다.
      • 가장 직접적이고, 성능이 빠르다.
      • 한 서버에서 여러 애플리케이션을 동시에 돌리면 충돌이 발생할 수 있다.
    • Virtual Machine : 하드웨어 위에 하이퍼바이저 (Hypervisor)를 설치하고, 그 위에 여러 운영체제를 가상으로 띄워 애플리케이션을 실행한다.
      • 하나의 물리 서버에서 여러 독립적인 OS 실행이 가능하다.
      • 하이퍼바이저가 CPU, 메모리, 디스크 등을 OS 단위로 가상화한다.
      • OS 전체를 실행하는 것이므로 상대적으로 무겁고 느리다, OS가 독립적으로 존재하므로 안정적이다.
      • ex ) Virtual Box, VMware 등

    Hypervisor (하이퍼바이저) 란 ? 
    : 단일 물리 머신에서 다수의 가상 머신을 실행할 대 활용하는 소프트웨어
    ex) VirtualBox, VMware

    주요 기능
    • 가상화
    : 물리적 하드웨어의 자원을 가상화하여 여러 개의 독립적인 가상 환경을 만듦
    • 리소스 할당 : 각 가상 머신에 CPU, 메모리, 스토리지 등의 컴퓨팅 자원을 필요에 따라 할당 및 관리
    독립적인 실행 : 각 가상 머신은 고유한 운영체제와 애플리케이션을 설치하고 실행할 수 있으며, 독립적으로 작동

    • Container : 운영체제 커널을 공유하면서, 애플리케이션 + 라이브러리만 격리하여 실행한다.
      • 그럼 VM보다 가볍고 빠르다.
      • OS 커널은 공유하고, 애플리케이션 실행 환경만 가상화한다.
      • 격리된 환경이므로, 라이브러리 충돌을 방지할 수 있다.
      • 배포 및 이동이 쉽다.
    • Severless : 서버 운영은 클라우드 제공자가 관리하고, 개발자는 코드 단위만 올려서 실행
      • 인프라 신경 쓰지 않아도 된다.
      • 사용한 만큼 비용이 발생한다.
      • 요청이 있을 때만 실행할 수 있다.

    이 4가지 구조 중 Docker는 Container 구조 기반의 가상화를 사용한다.

     

     

     


    도커 (Docker) 의 구성 요소

    도커 (Docker)

    애플리케이션과 실행에 필요한 환경 (라이브러리, 설정 등)을 하나의 컨테이너로 패키징해 어떤 환경에서도 동일하게 실행되도록 해주는 컨테이너 기반 가상화 기술이다. 이를 통해 애플리케이션을 환경으로부터 격리하여 개발 환경과 운영 환경 간의 차이로 발생하는 문제를 줄일 수 있습니다.

     

    격리한다 ?
    : 도커는 컨테이너 단위로 프로그램을 실행시키는데, 컨테이너 안에서 실행되는 프로세스는 마치 자기만 운영체제를 쓰는 것처럼 보이지만, 실제로는 다른 컨테이너와 같은 커널을 공유한다.

    • 도커 클라이언트 (Docker Client)
      사용자가 도커를 조작하는 인터페이스이다. 사용자는 도커 클라이언트를 통해 도커 호스트와 상호작용하고, 도커 이미지를 관리하며, 도커 컨테이너를 실행, 중지, 삭제 등을 할 수 있다.
    • 도커 호스트 (Docker Host)
      도커 이미지를 저장하고, 도커 컨테이너를 실행하며, 도커 클라이언트와 통신한다. 즉, 도커 파일을 이용하여 이미지를 빌드하는 작업이 실행된다.
      • 도커 데몬 (Docker Deamon)
        클라이언트에서 요청한 도커 명령어를 처리하고, 도커 이미지와 컨테이너를 관리하는 백그라운드 프로세스이다. 컨테이너의 생명주기를 관리하고, 리소스 할당 및 네트워크 연결 등의 작업을 처리한다.
      • 컨테이너 (Container)
        패키지 ( 코드 + 라이브러리 + 환경 설정 파일 ) 를 넣는 조립형 창고와 같다. 이때, 서로 다른 컨테이너는 격리된 환경에서 작동하므로 충돌하지 않는다.
      • 이미지 (Image)
        파일로 어플리케이션 실행에 필요한 독립적인 환경을 포함하며, 런타임 환경을 위한 일종의 템플릿이다. 이는 소스코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는 데 필요한 기타 파일을 포함하는 불변의 파일이다. 읽기 전용의 불변의 파일이므로, 특정 시점의 애플리이션과 가상 환경을 나타낸다.
    • 도커 레지스트리 (Docker Registry)
      도커 이미지를 저장하는 중앙 저장소로, 이미지들을 중앙에서 관리하고, 공유할 수 있는 플랫폼이다. 도커 클라이언트는 도커 레지스트리에서 이미지를 검색하고, 푸시하고 풀 할 수 있다.
      • 도커 허브 (Docker Hub)
        도커 커뮤니티에서 제공하는 공개적인 도커 레지스트리이다. 도커 허브에서는 다양한 도커 이미지를 검색하고, 공유하고, 다운로드 할 수 있다. 이는 도커 레지스트리의 대표적인 서비스로, 클라우드 기반의 레지스트리이다.
    • 도커 파일 (Docker File)
      도커 이미지를 빌드하기 위한 텍스트 파일이다. 도커 이미지를 구성하는 명령어와 설정이 포함되어있다. 도커 파일을 사용하면 반복적인 이미지 빌드를 자동화할 수 있다.

     


    도커 (Docker)의 동작 방식

    컨테이너 이미지 (hello-world) 실행 과정

    1. 터미널에 docker run hello-world 라고 입력한다.
    2. 도커 데몬이 도커 허브에서 hello-world 이미지를 풀(pull) 한다.도커 호스트에 이미지가 없으면, 도커 레지스트리에서 이미지를 다운로드한다.
    3. 도커 데몬이 새 컨테이너를 생성 및 실행한다.
    4. 도커 데몬이 출력을 클라이언트로 전달한다.

    hello-world 실습 결과