Code States/TIL

[0411] Docker - 왜 Docker인가?

ki1111m2 2023. 4. 11. 16:04

학습 목표

  • 컨테이너 기술이 무엇인지, Docker가 왜 필요한지 알 수 있다.
  • 컨테이너와 이미지, 레지스트리가 무엇인지 이해할 수 있다.
  • 대표적인 레지스트리인 Docker Hub에서 이미지를 검색하고, 사용할 수 있다.
  • 한 개의 이미지를 이용해서 컨테이너를 구축할 수 있다.
  • 두 개 이상의 이미지를 이용해서 컨테이너를 구축하고 서로가 어떻게 연결되는 지 알 수 있다.
  • Docker CLI에서 명령어를 사용해서 이미지를 생성/수정/배포하고, 컨테이너를 생성/삭제할 수 있다.
  • Dockerfile을 이용해 이미지를 생성할 수 있다.
  • 애플리케이션을 컨테이너화할 수 있다.

의존성 충돌 문제를 해결해 준다


  • 프로그램 A 실행에 다른 프로그램 B가 반드시 필요한 경우, “프로그램 A는 프로그램 B에 의존 관계를 가지고 있다”
  • A는 C의 1버전을 요구하고, B는 C의 2버전을 요구한다면? → 의존성 충돌
  • 컨테이너 기술은 애플리케이션을 컨테이너 내에 구성함 → 컨테이너에서 실행 중인 애플리케이션은 어떠한 의존성도 공유하지 않고, 각자 고유의 의존성을 포함하고 있음
  • 각 컨테이너는 철저하게 실행 환경이 격리되어 있음
  • 프로세스
    • 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스할 수 있음
    • 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없음
  • 네트워크
    • 기본으로 컨테이너 하나에 하나의 IP 주소가 할당되어 있음
  • 파일 시스템
    • 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있음
    • 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있음

개발과 배포 환경을 일치시킨다


  • 개발팀
    • OS에 상관없이 즉시 애플리케이션 실행 환경을 만들 수 있음
    • 개발을 컨테이너 위에서 진행할 경우, 모든 개발팀이 동일한 환경 하에 개발을 진행할 수 있음
      • 애플리케이션 구성 자체가 컨테이너화되면 YAML 파일 하나 + 명령어 하나로 모든 애플리케이션 실행 환경 구성을 완료할 수 있음
  • 배포시
    • “어떤 애플리케이션이 특정 런타임 환경 위에서 실행되고, 사용자에게 이를 제공한다” → 인터넷 상에 공개적으로 노출하느냐, 내 컴퓨터 상에서 프라이빗하게 작동하느냐
    • AWS의 EC2 상에 도커를 설치하거나, ECS를 이용하여 보다 쉽게 애플리케이션을 배포할 수 있음

수평 확장을 쉽게 해주고, 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다


  • 컨테이너 기술의 가장 큰 장점은 “실행 환경의 일치”
  • 컨테이너 기술은 서버 증설에 아주 활발하게 이용되고 있음
  • 동일한 애플리케이션 구성(이미지)을 바탕으로 새로운 서버에 해당 애플리케이션을 컨테이너로 실행하고, 로드 밸런서에 이 서버를 추가하기만 하면 됨
  • 이러한 기술을 응용하여, 새로운 버전의 애플리케이션을 여러 서버 중 몇 대에만 운영하여 테스트하는 방법도 가능함
    • 새 버전의 애플리케이션에서 발생할 수 있는 문제들을 미리 확인하고, 이러한 문제가 사용자 전체에게 영향을 끼치지 않도록 만들 수 있음

핵심 키워드


  • 컨테이너
    • 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자
  • 이미지
    • 실행되는 모든 컨테이너는 이미지로부터 생성됨
    • 이미지는 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿으로, 이를 이용해 즉시 컨테이너를 만들 수 있음
    • 이미지를 이용해 여러 개의 컨테이너를 생성할 수 있음
      • 이를 이용해 애플리케이션의 수평 확장이 가능함
    • 기본 이미지(base image)로부터 변경 사항을 추가/커밋해서 또 다른 이미지를 만들 수 있음
  • 레지스트리
    • 이미지는 레지스트리에 저장됨
    • Docker Hub, Amazon ECR 등
    • 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 존재하지 않는다면, 기본 레지스트리로부터 다운로드 받게 됨