육두문자

Blog

Docker

Chang.Seo
2024.07.16
#Cloud

Docker

아래는 Docker의 목적, 탄생 배경, 장점, 구성 요소, 최적화 방법, 관련 개념에 대한 정리입니다.

Docker 목적

​ Docker는 소프트웨어와 종속성을 하나의 패키지로 묶어 응용 프로그램의 실행 환경을 일관되게 제공하는 기술로, ​ 운영체제에서 프로세스를 격리해 별도의 실행 환경을 제공합니다. ​

Docker 탄생 배경

​ Docker는 다음과 같은 문제를 해결하기 위해 개발되었습니다: ​

  • 개발 환경 일관성 부족: 개발 환경과 운영 환경이 일치하지 않아 애플리케이션이 예상대로 동작하지 않음
  • 애플리케이션 종속성 문제: 서로 다른 애플리케이션이 필요한 라이브러리와 종속성이 충돌함
  • 배포 및 확장 문제: 수동 배포 과정이 복잡하고 확장이 어려움
  • 자원 효율성 문제 (VM): 가상 머신은 독립적인 운영체제로 인해 리소스 사용이 비효율적임 ​

Docker 장점

  • 환경 일관성: 개발 환경과 운영 환경이 동일하게 유지 가능
  • 독립된 환경: 여러 애플리케이션이 독립적으로 실행 가능
  • 자원 효율성: 가상 머신보다 가벼운 리소스로 더 많은 애플리케이션을 실행 가능 ​

Docker 구성 요소

  • 이미지 (Image): 애플리케이션과 그 실행에 필요한 모든 것을 포함하는 일종의 템플릿
  • 컨테이너 (Container): 이미지를 기반으로 실행되는 애플리케이션의 인스턴스
  • 레지스트리 (Registry): 이미지를 저장하고 배포하는 중앙 저장소 ​

Docker 최적화

  • 이미지 크기 최적화: 멀티 스테이지 빌드를 사용하여 불필요한 빌드 종속성을 제거해 최종 이미지 크기 축소
  • 레이어 캐싱 활용: 변경이 적은 레이어를 먼저 추가해 빌드 캐시를 최대한 활용
  • 최소 권한 원칙: USER 지시자를 사용해 애플리케이션을 사용자 권한으로 실행
  • 성능 최적화: 최소한의 라이브러리와 도구만 설치된 적절한 베이스 이미지를 선택 (예: Alpine) ​

관련 개념

  • Docker: 컨테이너 생성 및 관리 도구로, 애플리케이션과 그 의존성을 패키지로 묶어 운영 체제와 격리된 환경에서 실행하게 하는 도구
  • Docker Compose: 여러 컨테이너로 구성된 멀티 컨테이너 애플리케이션을 정의하고 관리하기 위한 도구
  • Kubernetes: 컨테이너화된 애플리케이션의 배포, 스케일링, 운영을 자동화하는 오픈 소스 시스템
  • VM (Virtual Machine): 독립적인 운영 체제를 실행해 독립적인 환경을 보장하나, 컨테이너에 비해 무겁고 비효율적임. 대신 높은 격리성 제공

Dockerfile 예시

# 베이스 이미지 설정
FROM node:14

# 작업 디렉토리 설정
WORKDIR /usr/src/app

# 의존성 파일 복사 및 설치
COPY package*.json ./
RUN npm install

# 앱 소스 코드 복사
COPY . .

# 포트 설정
EXPOSE 8080

# 실행 명령어 설정
CMD ["node", "index.js"]

위와 같은 Dockerfile을 코드로 작성한 후, 이를 빌드해 이미지를 만들고, 해당 이미지를 Docker에서 활용합니다.

결론

프로젝트를 위해 필수적으로 사용되는 Docker의 개념을 이해한다면 효과적으로 업무를 진행할 수 있을 것으로 생각합니다.

Copyright © 2024 KTB6 Team Blog