우와한 개발자

[Docker] Docker란? 개념과 특징, 아키텍처와 주요 용어 정리

by 우와한개발자

[ 어플리케이션 배포 방식 ]

1. 하드웨어 배포 방식

  • OS 위에 앱을 직접 설치해서 실행하는 방식
  • 단일 서버에서 실행되는 어플리케이션에 적합
  • 시스템 규모가 커지고 복잡해질수록 확장 및 관리의 문제가 발생

 

2. 가상머신

  • 하드웨어 배포 방식 OS 위에 앱을 직접 설치해서 실행하는 방식
  • 운영체제를 포함한 모든 리소스를 별도로 가짐
  • 크기가 크고 시작이 오래걸리며 리소스 사용이 비효율적임(OS위에 또 OS가 있으니까)
  • 하이퍼바이저 : 물리적 하드웨어 위에서 각각의 가상머신(VM)을 생성하고 독립적으로 실행·관리하는 소프트웨어 (베어메탈 방식에서는 특수한 OS 역할을 하기도 함)

 

3. 컨테이너 방식

  • Guest OS 없이 Host OS의 커널을 공유하면서 앱 실행 환경만 격리하는 방식
  • 컨테이너
    • 저장소(Registry)에 보관된 특정한 도커 이미지를 실행한 것
    • 컨테이너 자체가 하나의 프로그램을 실행
  • 격리된 환경에서 애플리케이션과 그에 대한 필요한 모든 종속성을 패키징하여 실행
  • 가볍고 격리된 환경을 제공하며, 호스트와 공유하는 리소스를 최소화 함

 

⚠️ MSA (Microservice Architecture, 마이크로서비스 아키텍처)
- 애플리케이션을 만들 때 하나의 서버에 다 때려넣는 게 아니라 도메인(기능)별로 쪼개 각각 독립적인 컨테이너로 실행하는 방식
- 하나의 서버가 죽어도 해당 서비스만 죽고 다른 서비스는 사용 가능
모놀리식                     MSA
하나의 서버에 전부            도메인별로 쪼갬

[로그인 + 결제 + 주문]       [로그인] [결제] [주문]
       ↓                      ↓       ↓      ↓
  결제 오류나면            결제만 죽고 로그인·주문은 멀쩡
  전체 서비스 다운​

 

[ Docker 도커]

  • 애플리케이션을 신속하게 구축, 테스트, 배포할 수 있는 컨테이너 기반의 오픈소스 가상화 플랫폼
  • 프로그램과 그 실행 환경을 하나로 묶어, 어디서든 동일하게 실행할 수 있게 해주는 기술
❓ Docker CE vs. EE
- CE는 상업적 용도로도 완전히 무료로 사용가능
- EE는 보다 효율적인 방식으로 컨테이너를 실행 및 관리, 보호하기 위한 추가 기능과 서비스 및 공식 지원을 제공

1. Docker 특징과 역할

1) 컨테이너 기반 가상화

  • 도커는 컨테이너라는 가상화 기술을 사용하여 애플리케이션과 그에 필요한 모든 종속성을 패키징함
  • 가상 머신과는 달리 호스트 운영 체제의 커널을 공유하면서 격리된 환경에서 실행되기 때문

2) 이식성 및 환경 일관성

  • 호스트 운영 체제와 독립적이고 실행환경을 컨테이너에 포함시킴

3) 성능 및 효율성

  • 가상머신보다 가볍고 빠름

4) 이미지에 의한 버전관리와 롤백

5) 쉬운 확장과 스케일링

6) 자원 격리

 

2. Docker 활용

1) 애플리케이션 배포와 관리

2) 마이크로서비스 아키텍처

3) 개발 환경 구축

4) 테스트 환경 제공

5) CI/CD 파이프라인 구성

6) 스케일링과 오케스트레이션

7) 데이터베이스 및 서비스의 격리

 

3. Docker 아키텍처

 

1) Docker 호스트 (Docker Host)

  • Docker 엔진이 설치되고 실행되는 물리적 또는 가상화된 시스템
  • Linux 또는 Docker 엔진 호환 OS를 실행하는 환경
  • 이미지, 컨테이너, Docker 엔진, 컨테이너 런타임, Host OS 등 Docker 실행에 필요한 모든 구성 요소가 존재하는 환경
  • 예를 들어 Window에 설치된 WSL2 위에서 돌아가는 Linux 환경

 

2) Docker 엔진 (Docker Engine)

  • Docker의 핵심 실행 환경 전체를 말함
  • Docker 데몬 + Docker API + Docker CLI 세 가지로 구성
  • Docker 엔진이 종료되면 컨테이너는 모두 종료되지만, Docker 엔진이 실행될때는 컨테이너까지 실행되지 않음
OS 도커엔진 시작 도커엔진 종료 자동실행 설정
윈도우 시작 → Docker Desktop 선택 Docker Desktop 창 닫기 Docker Desktop을 실행해야 도커 엔진도 실행됨
MacOS Finder → ‘애플리케이션’ 폴더 → Docker Desktop 선택 Menu Bar에서 Docker 클릭 → Quit Docker Desktop 선택 Menu Bar에서 Docker 클릭 → Preferences → Start Docker Desktop when you login 선택
리눅스 sudo systemctl start docker sudo systemctl stop docker sudo systemctl enable docker

 

3) Docker 데몬 (Docker Daemon)

  • Docker 이미지를 만들고 컨테이너를 관리하는 서비스
  • Docker 전체의 제어 센터 역할

 

4) Docker 클라이언트 (Docker Client)

  • 사용자가 Docker를 사용하기 위해 명령어를 입력하는 명령줄도구(CLI)
  • 컨테이너, 이미지, 네트워크, 데이터 볼륨 관리
  • Docker 컨테이너끼리 서로 연결되도록 네트워크 설정 가능
  • REST API를 통해 Docker 데몬과 통신
  • 데몬과 같은 컴퓨터에서 실행할 수도 있고, 원격으로 연결할 수도 있음

 

5) Docker 객체 (Docker Object)

  • Docker에서 앱을 패키징하고 배포할 때 사용하는 구성 요소들
  • 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 등이 포함됨
    • Docker 이미지 : 앱 소스코드 + 라이브러리 + 종속성이 담긴 읽기전용 파일 (붕어빵 틀)
    • Docker 컨테이너 : 이미지를 실제로 실행한 상태 (붕어빵). 이미지 하나로 여러 개의 컨테이너를 만들 수 있음

 

6) Docker Registry

  • Docker 이미지를 저장하고 배포하는 시스템
  • Docker Hub가 대표적인 퍼블릭 레지스트리
  • 회사 내부에 프라이빗 레지스트리를 직접 구축해서 사용할 수도 있음

 

4. Docker 용어와 도구

1) Docker 이미지 (Docker Image)

  • 앱 소스코드 + 라이브러리 + 종속성이 담긴 읽기전용 파일
  • 이미지를 실행하면 컨테이너가 됨 (붕어빵 틀)
  • 이미지 하나로 여러 개의 컨테이너를 만들 수 있음
  • 레이어 구조로 되어 있어 변경할 때마다 새 레이어가 추가되는 방식
  • 처음부터 직접 만들 수도 있고, Docker Hub에서 가져다 쓸 수도 있음
  • Dockerfile을 기반으로 빌드됨

 

2) Docker 컨테이너 (Docker Container)

  • 소프트웨어 애플리케이션과 그 실행 환경을 패키징한 가벼운 격리된 환경
  • 이미지를 실제로 실행한 상태 (읽기전용인 이미지와 달리 실행 가능한 라이브 상태)
  • 컨테이너 안에서 파일 추가·삭제 등 변경이 가능하지만, 컨테이너가 종료되면 변경사항은 사라짐
  • 각 컨테이너는 독립적으로 격리된 환경에서 실행됨 (같은 이미지로 만든 컨테이너여도 서로 영향을 주지 않음)

 

3) Dockerfile

  • Docker 이미지를 빌드하는 방법에 대한 지침이 담긴 텍스트 파일
  • Docker 엔진이 이미지를 만들기 위해 실행할 CLI 명령 목록이 순서대로 적혀 있음
  • 이미지 생성 프로세스를 자동화해주는 파일

 

4) Docker 이미지 레이어

  • Docker 이미지는 여러 개의 레이어로 구성됨
  • 이미지를 변경할 때마다 새로운 레이어가 추가되는 방식
  • 이전 레이어는 롤백하거나 다른 프로젝트에서 재사용 가능
  • 컨테이너를 만들면 컨테이너 레이어가 추가되고, 컨테이너가 종료되면 사라짐

 

5) Docker Hub

  • Docker 이미지의 공개 저장소 (레지스트리)
  • 100,000개 이상의 컨테이너 이미지 보유
  • 누구나 이미지를 올리거나 내려받을 수 있음
  • Public / Private 저장소 모두 지원

 

6) Docker Desktop

  • Mac / Windows용 Docker 설치 프로그램
  • Docker Engine, Docker CLI, Docker Compose, Kubernetes 등이 한 번에 포함되어 있음

 

7) Docker Compose

  • 여러 컨테이너를 한꺼번에 관리하기 위한 도구
  • YAML(.yml) 파일에 실행할 서비스(컨테이너)들을 정의해두고 명령어 한 번으로 전체 실행 가능
  • 예를 들어 웹 서버 컨테이너 + DB 컨테이너를 동시에 띄울 때 사용

 

8) Docker 플러그인

  • Docker Engine의 기능을 확장할 수 있는 추가 모듈
  • 권한 부여, 볼륨, 네트워크 관련 기능 등을 추가할 수 있음
종류 설명 예시
네트워크 플러그인 컨테이너 간 네트워크 연결 확장. 여러 호스트에 걸친 네트워크 구성 가능 Weave Net
볼륨 플러그인 컨테이너 데이터를 외부 스토리지에 저장. 컨테이너가 종료돼도 데이터 유지 가능 rclone, AWS EBS 연동 플러그인
로깅 플러그인 컨테이너 로그를 외부 시스템으로 전송 Fluentd, Splunk
모니터링 플러그인 컨테이너 자원 사용량 수집 및 모니터링 cAdvisor, Prometheus Docker Plugin

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기