Docker / / 2024. 12. 9. 16:26

Docker in Action Chapter 3

3장: Software installation simplified (소프트웨어 설치 단순화)

이 장에서는 Docker를 사용하여 소프트웨어를 식별하고, 찾고, 설치하는 과정을 단계별로 살펴봅니다. 또한 파일 시스템 격리와 레이어 개념을 통해 이미지 내부 구조를 이해하고, 실제 설치 과정에서 중요한 최선의 방법들을 익힙니다.

소프트웨어 설치 과정의 3단계

  1. 소프트웨어 식별:
    어떤 프로그램을 설치할지 이름, 버전, 출처(리포지토리 및 태그)를 정확히 지정해야 합니다.

    • Docker는 소프트웨어를 ‘이미지’ 단위로 다루며, 이미지는 특정 레지스트리 내의 리포지토리와 태그를 통해 식별됩니다.
  2. 리포지토리 찾기 및 이미지 설치:
    Docker Hub(기본 레지스트리)나 다른 레지스트리를 통해 이미지를 검색하고 pull 명령어로 다운로드할 수 있습니다.

    • 디폴트로 docker run이나 docker pull 명령을 사용할 때 Docker Hub를 참조하지만, 필요하다면 대체 레지스트리를 지정할 수도 있습니다.
    • 인증이 필요한 경우 docker login/docker logout을 통해 비공개 리포지토리에 접근할 수 있습니다.
  3. 설치된 파일 구조 이해:
    실제로 컨테이너 파일 시스템 내부에서 소프트웨어가 어떻게 구성되고 격리되는지, 레이어를 통해 이해할 수 있습니다.

    • 이미지는 여러 레이어의 집합이며, 각 레이어는 변경 사항(파일 추가/수정)을 기록합니다.
    • 유니온 파일 시스템(UFS)과 MNT 네임스페이스, chroot 등을 활용하여 컨테이너 파일 시스템을 격리하고 관리합니다.

소프트웨어 식별: 리포지토리와 태그

  • 리포지토리 (예: docker.io/library/nginx): 이미지가 속한 이름 있는 공간.
  • 태그 (예: nginx:latest, nginx:1.19): 리포지토리 내 특정 이미지 버전을 식별하는 라벨.
  • 서로 다른 태그를 사용해 같은 소프트웨어의 다양한 버전, 구성 변형을 관리.

Docker를 통한 이미지 설치 방법

  1. 레지스트리 사용:

    • docker pull <repository>:<tag> 명령으로 Docker Hub나 다른 레지스트리에서 이미지 다운로드.
    • 이미지 없으면 Docker가 자동으로 레지스트리에서 가져옴.
  2. 이미지 파일 사용 (docker save / docker load):

    • docker save로 이미지를 tar 파일로 내보내고, docker load로 해당 파일을 다시 가져와 설치 가능.
    • 레지스트리가 없는 환경, 파일로 이미지 배포가 필요할 때 유용.
  3. Dockerfile을 통한 이미지 빌드 (docker build):

    • Dockerfile에 이미지 빌드 단계를 정의한 뒤 docker build 명령으로 이미지를 생성.
    • Dockerfile 자체를 배포하면 사용자는 동일한 절차로 이미지를 빌드할 수 있다.
    • 종속성 변동 시 빌드 시점 차이로 문제가 생길 수 있다는 단점이 있음.

Docker Hub 웹 인터페이스

  • Docker Hub 웹사이트(hub.docker.com)를 통해 리포지토리 검색, 태그 조회, 다운로드 횟수, 사용자 리뷰 등 확인 가능.
  • 계정을 만들고 이미지에 별 표시, 코멘트를 남기는 등 커뮤니티 활동 가능.

소프트웨어 설치 소스 다양화

  • Docker Hub 외에도 AWS ECR, GCR, Quay.io 등의 대체 레지스트리 사용 가능.
  • 사내 private 레지스트리를 구축하여 내부용 이미지를 배포할 수도 있다.

파일 시스템 격리와 레이어 개념

  • Docker 이미지는 단일 파일이 아니라 여러 레이어의 조합. 각 레이어는 불변(read-only)이며 변경 시 새로운 레이어 생성.
  • 레이어 공유 덕분에 동일한 기반 이미지 의존성을 재사용할 수 있어 저장 공간, 네트워크 대역폭 효율 개선.
  • 컨테이너 파일 시스템은 유니온 파일 시스템을 통해 읽기 전용 레이어들 위에 쓰기 가능한 레이어를 얹어 구성.
  • chroot, MNT 네임스페이스 등 OS 수준 격리 기법을 활용해 컨테이너 내부의 파일 시스템을 외부와 독립적으로 유지.

레이어 활용 이점

  • 공통 레이어 재사용: 한번 다운로드한 베이스 이미지 레이어를 다른 이미지에서도 재사용.
  • 관심사 분리: OS 레벨 의존성과 애플리케이션 레벨 의존성을 분리하여 이미지 설계 가능.
  • 경량화와 효율성: 스토리지, 배포 대역폭 절약.

레이어 기반 시스템의 한계

  • 일부 유니온 파일 시스템 제한, SELinux 확장 속성 미지원, Copy-on-write 문제 등.
  • 대부분 볼륨, 다른 스토리지 드라이버, 또는 환경 설정을 통해 극복 가능.
  • 특정 워크로드 최적화를 위해 다른 스토리지 드라이버나 볼륨 사용 고려.

정리:
3장은 Docker를 통해 소프트웨어를 설치하는 전체 과정을 "식별 → 찾기/설치 → 이해"의 세 단계로 나누어 설명합니다. Docker 이미지를 레지스트리에서 찾고(pull), 필요하면 파일 형태로 다루며(save/load), Dockerfile을 통해 직접 빌드할 수도 있습니다. 이미지와 레이어, 파일 시스템 격리 개념을 이해함으로써 컨테이너 기반 설치 전략이 제공하는 이점(유연성, 효율성, 재사용성)을 활용할 수 있습니다. 다음 장에서는 이 개념들을 바탕으로 스토리지 관리와 볼륨 활용에 대해 심층적으로 다룰 예정입니다.

'Docker' 카테고리의 다른 글

Docker in Action Chapter 5  (0) 2024.12.09
Docker in Action Chapter 4  (0) 2024.12.09
Docker in Action Chapter 2  (1) 2024.12.09
Docker in Action Chapter 1  (0) 2024.12.09
Docker 컨테이너 네트워킹  (1) 2024.12.04
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유