[Docker] Docker란?

kt·2025년 3월 17일

1. 개념

Docker는 애플리케이션을 컨테이너라는 표준화된 유닛으로 패키징하여 개발, 배포, 실행할 수 있는 오픈소스 플랫폼입니다.
이러한 컨테이너화 기술은 애플리케이션이 어떤 환경에서든 동일하게 실현할 수 있습니다

핵심 개념

  • 컨테이너(Container)
    애플리케이션과 그 의존성을 포함하는 격리된 실행 환경입니다.
    호스트 OS의 커널을 공유하면서 namespace 및 cgroup을 통해 프로세스 단위로 격리됩니다.

  • 이미지(Image)
    컨테이너를 생성하기 위한 읽기 전용 템플릿입니다.
    애플리케이션 코드, 런타임, 라이브러리, 환경 변수 등을 포함합니다.

  • Dockerfile
    Docker 이미지를 생성하기 위한 텍스트 파일로, 이미지 빌드에 필요한 모든 명령어를 순차적으로 포함합니다.

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
  • 레지스트리(Registry)
    Docker 이미지를 저장하고 공유하는 리포지토리입니다.
    Docker Hub가 가장 대표적인 공개 레지스트리입니다.

  • Docker Compose
    다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다.

version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"
  db:
    image: mongo
    volumes:
      - mongo-data:/data/db
volumes:
  mongo-data:
  • Docker Swarm/Orchestration: 여러 Docker 호스트를 클러스터링하고 컨테이너를 오케스트레이션하는 기능입니다.

가상 머신과의 차이점

Docker 컨테이너와 가상 머신의 주요 차이점은 다음과 같습니다.

  1. 아키텍처:

    • 컨테이너 : 호스트 OS 위에서 실행되며, 호스트 커널을 공유합니다.
    • 가상 머신 : 하이퍼바이저 위에서 실행되며, 각각 완전한 OS를 포함합니다.
  2. 리소스 효율성:

    • 컨테이너 : 가볍고 필요한 바이너리와 라이브러리만 포함합니다 (MB 단위).
    • 가상 머신 : 전체 OS와 모든 종속성을 포함합니다 (GB 단위).
  3. 시작 시간:

    • 컨테이너 : 초 단위로 시작 가능합니다.
    • 가상 머신 : 분 단위의 시작 시간이 필요합니다.
  4. 격리 수준:

    • 컨테이너 : 프로세스 수준의 격리 (약간 낮은 격리 수준).
    • 가상 머신 : 하드웨어 수준의 격리 (더 높은 격리 수준).

2. 언제부터 트렌드가 되었는지

Docker는 2013년 3월 Solomon Hykes가 PyCon에서 처음 공개했으며, 이후 빠르게 인기를 얻기 시작했습니다.

주요 연혁

  • 2013년 : Docker Inc.(당시 dotCloud)에서 오픈소스 프로젝트로 Docker를 출시
  • 2014년 : Docker 1.0 버전 출시, 기업용 제품 시장에 진입
  • 2015-2016년 : 마이크로서비스 아키텍처의 부상과 함께 Docker의 사용이 급증
  • 2017년 : Kubernetes가 컨테이너 오케스트레이션 표준으로 부상하면서 Docker의 생태계가 확장
  • 2018-2019년 : 엔터프라이즈 환경에서의 Docker 채택이 주류화
  • 2020년 이후 : 클라우드 네이티브 개발의 핵심 구성 요소로 완전히 자리매김

Docker는 DevOps 문화의 확산, 마이크로서비스 아키텍처의 인기, 클라우드 컴퓨팅의 성장과 맞물려 2015년부터 2017년 사이에 산업 전반에 걸쳐 광범위하게 채택되기 시작했습니다.


3. 장단점

장점단점
경량성 : 컨테이너는 VM보다 가볍고 빠르게 실행됨보안 문제 : 컨테이너가 호스트 커널을 공유하므로 보안 위험이 존재
빠른 배포 및 실행 : 이미지 기반이므로 빠르게 배포 및 스케일링 가능데이터 영속성 문제 : 컨테이너는 휘발성이므로 데이터 영속성을 위해 추가 설정 필요
이식성 : 어디서나 동일한 환경에서 실행 가능 (개발 → 테스트 → 운영)복잡한 네트워크 설정 : 여러 컨테이너 간의 네트워크 설정이 복잡할 수 있음
효율적인 자원 사용 : 리소스를 최소화하면서 성능 극대화스토리지 관리 복잡성 : 볼륨 및 마운트 설정이 복잡할 수 있음
확장성 및 오케스트레이션 용이 : Kubernetes 등과 연동하여 자동 확장 가능학습 곡선 : Docker Compose, Dockerfile 등 학습 필요
버전 관리 및 롤백 용이 : 이미지 버전 관리를 통해 쉽게 롤백 가능GUI 환경 부족 : CLI 중심이므로 초보자에게 어려울 수 있음
마이크로서비스 아키텍처에 적합 : 독립된 서비스 단위로 운영 가능호스트 종속성 : 호스트 커널에 따라 성능 및 호환성이 달라질 수 있음

4. 어떤 상황에서 주로 쓰이는지 활용 사례

Docker는 다양한 상황과 산업 분야에서 활용되고 있습니다:

소프트웨어 개발 환경

  • 개발 환경 표준화 : 모든 개발자가 동일한 환경에서 작업하도록 보장
  • 격리된 테스트 환경 : 각 테스트를 격리된 환경에서 실행하여 신뢰성 향상
  • CI/CD 파이프라인 : 자동화된 빌드, 테스트, 배포 프로세스 간소화
# 개발 환경 실행 예시
docker-compose up -d

마이크로서비스 아키텍처

  • 서비스 격리 : 각 마이크로서비스를 독립적인 컨테이너로 실행
  • 동적 확장 : 트래픽에 따라 특정 서비스만 독립적으로 확장
  • 기술 다양성 : 각 서비스에 최적화된 프로그래밍 언어와 프레임워크 사용 가능

클라우드 애플리케이션

  • 클라우드 마이그레이션 : 온프레미스에서 클라우드로의 애플리케이션 이전 용이
  • 하이브리드 클라우드 : 여러 클라우드 환경에서 일관된 배포
  • 서버리스 컴퓨팅 : 서버리스 환경에서 Docker 컨테이너 실행이 가능하며, AWS Fargate, Azure Container Instances 등이 대표적

빅데이터 및 데이터 사이언스

  • 데이터 처리 파이프라인 : Spark, Hadoop 등을 컨테이너화하여 배포 간소화
  • ML/AI 모델 훈련 및 배포 : 복잡한 머신러닝 환경을 컨테이너로 패키징
  • 재현 가능한 데이터 과학 : 분석 환경을 표준화하여 결과 재현성 보장

엔터프라이즈 애플리케이션

  • 레거시 애플리케이션 현대화 : 기존 애플리케이션을 컨테이너화하여 클라우드로 이전
  • 다중 테넌트 애플리케이션 : 각 고객을 위한 격리된 환경 제공
  • 하이브리드 및 멀티클라우드 전략 : 다양한 환경에서 일관된 배포 전략 구현

구체적 활용 사례 예시

  1. 넥플릭스 : 마이크로서비스를 컨테이너로 패키징하여 AWS에서 대규모로 운영

  2. Spotify : Docker를 사용하여 마이크로서비스 아키텍처를 구현하고 확장성 개선

  3. PayPal : 레거시 시스템을 컨테이너화하여 비용 절감 및 효율성 향상

  4. eBay : Docker와 Kubernetes를 사용하여 클라우드 마이그레이션 및 DevOps 혁신

  5. Capital One : 금융 서비스 애플리케이션을 컨테이너화하여 배포 시간 단축

  6. NASA : 우주 임무 데이터 처리 및 과학적 계산을 위한 워크로드 컨테이너화


마무리

Docker는 현대 소프트웨어 개발과 배포 방식을 혁신적으로 변화시켰습니다.
컨테이너화 기술은 개발자와 운영팀 모두에게 많은 이점을 제공하며, 클라우드 네이티브 애플리케이션 개발의 핵심 기술로 자리 잡았습니다.
Docker와 컨테이너 기술은 앞으로도 발전하며 클라우드 네이티브, DevOps, 마이크로서비스의 핵심 기술로 자리 잡을 것입니다.


참고 자료

profile
기록하는 블로그

0개의 댓글