[Docker] 1.도커의 기초 - 도커를 사용하는 의의


책 ‘도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문’을 기반으로 공부 한 내용을 정리

  • 사용 의의
    • 변화하지 않는 실행 환경으로 멱등성 확보
      • 환경 차이로 인한 문제 방지
        코드로 관리하는 인프라(Infrastructure as Code)와 불변 인프라(Immutable Infrastructure) 개념 제안
        • 코드로 관리하는 인프라(Infrastructure as Code)
          • 코드 기반으로 인프라를 정의
          • 서버 구성과 라이브러리 및 도구 설치를 코드로 정의 후 셰프(Chef)나 앤서블(Ansible) 같은 프로비저닝 도구로 서버를 구축
          • 코드 중심으로 바꿈으로써 쉽게 같은 구성의 서버 여러대 복제 가능

            그러나, 코드 기반으로 인프라 구축을 관리해도 멱등성 보장을 위해 항구적 코드를 계속 작성하는 것은 효율성이 낮기 때문에 불변 인프라 개념을 도입

        • 불변 인프라(Immutable Infrastructure) 개념
          • 어떤 시점의 서버 상태를 저장해 복제할 수 있게 하자는 개념
          • 제대로 설정된 상태의 서버를 항상 사용 할 수 있다는 장점 보유
    • 코드를 통한 실행 환경 구축 및 애플리케이션 구성
      • 애플리케이션 구성 관리의 용이성
        필요한 컨테이너를 각각 실행하는 방법으로 시스템을 구성
      • 도커 컨테이너 오케스트레이션 시스템
        여러 서버에 걸쳐 있는 여러 컨테이너를 관리하는 기법
      • 도커 컴포즈(Docker Compose)
        여러 컨테이너를 사용하는 애플리케이션을 쉽게 관리하도록 해줌.
        yaml 포맷으로 작성된 설정 파일로 컨테이너를 정의하거나 컨테이너 간의 의존 관계를 정의해 시작 순서 제어 가능
        version: "3"
        services:
            web:
                image: gihyodocker/web
                ports:
                    - "3000:3000"
                environment:
                    REDIS_TARGET: redis
                depends_on:
                    - redis
            redis:
            image: "redis:alpine"
      
      • 도커 스웜(Docker Swarm)
        도커 컴포즈가 단일 서버를 넘어 여러 서버에 걸쳐 있는 여러 컨테이너를 관리할 수 있도록 한 도구
        컨테이너 증가 혹은 감소는 물론이고 노드의 리소스를 효율적으로 활용하기 위한 컨테이너 배치 및 로드 밸런싱 기능 등 더욱 실용적인 기능 갖췄고, 롤링 업데이트(오래된 컨테이너와 새로운 컨테이너를 단계적으로 서비스에 교체 투입하는 것) 가능
    • 실행 환경과 애플리케이션의 일체화로 이식성 향상
    • 시스템을 구성하는 애플리케이션 및 미들웨어의 관리 용이성