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

Docker in Action Chapter 1

1장: Docker에 오신 것을 환영합니다(Welcome to Docker)

이 장에서는 Docker의 기본 개념, 컨테이너가 무엇이며 왜 중요한지, 컨테이너와 기존 가상화 기술의 차이점, 그리고 Docker가 소프트웨어 설치·배포·실행 문제를 어떻게 해결하는지를 소개합니다. 또한 "Hello, World" 예제를 통해 Docker를 실제로 어떻게 사용하는지 체험하고, Docker 사용 시 유용한 도구와 생태계에 대해 간략히 다룹니다.

리눅스 컨테이너 기본 개념

  • 컨테이너란?
    리눅스 커널 기능(네임스페이스, cgroups)을 활용하여 프로세스 격리와 자원 관리를 제공하는 운영체제 수준 가상화 기술.
    각 컨테이너는 독립적인 파일 시스템, 네트워크 스택, 프로세스 공간을 가지며, 호스트 커널을 공유한다.

  • 컨테이너의 특징:

    • 가벼우며, 빠른 생성·실행 가능
    • 각 컨테이너는 호스트와 같은 커널을 사용하지만 서로 격리
    • 애플리케이션을 각각 독립적인 단위로 패키징하여 충돌 방지, 효율적 자원 관리, 손쉬운 배포·확장 지원
  • 컨테이너 vs 직접 실행 프로세스:
    호스트에서 바로 실행하는 프로세스는 하드웨어에 직접 접근하고, 성능적 이점과 자유도가 높으나, 환경 격리·자원 관리·이식성 면에서 불편하다. 반면, 컨테이너는 격리와 이식성이 뛰어나고 배포 관리가 쉽지만, 하드웨어 접근이나 성능 최적화 면에서 일부 제약이 있을 수 있다.

가상머신(VM)과의 차이점

  • 가상머신은 하드웨어 가상화로 별도 커널을 사용하는 반면, 컨테이너는 호스트 커널을 공유하여 오버헤드를 줄인다.
  • 컨테이너는 VM보다 훨씬 경량, 빠른 시작/중지 가능. VM은 완전한 OS를 포함하므로 더 무겁고 시작이 느리다.
  • 결국 Docker는 하드웨어 가상화 기술이 아닌, 운영체제 수준 가상화(컨테이너 기술)를 쉽게 사용하는 도구이다.

Docker와 컨테이너를 통한 문제 해결

  1. 소프트웨어 설치·업그레이드·제거 어려움:
    다양한 OS, 라이브러리 충돌, 의존성 문제, 복잡한 배포 절차, 보안 업데이트 관리 등.
    Docker는 애플리케이션+의존성을 이미지로 묶어 어디서나 동일한 환경 재현, 간단한 명령으로 설치·제거 가능.

  2. 이식성(Portability) 향상:
    한 번 컨테이너 이미지로 패키징하면 Linux, macOS, Windows 서버 등에서 동일하게 실행 가능. 개발환경-운영환경 불일치 최소화, CI/CD 파이프라인 강화.

  3. 보안 개선:
    컨테이너 격리를 통해 애플리케이션 오류나 보안 문제의 영향 범위를 해당 컨테이너로 제한.
    완전한 보안 솔루션은 아니나 심층 방어에 유용.

  4. 배포·관리 단순화:
    컨테이너 단위로 애플리케이션을 배포하면 종속성 관리, 버전 관리, 확장이 쉬워짐.
    동적 스케일링, 팀원 온보딩 시간 단축, 로컬 개발환경 모델링에 도움.

"Hello, World" 예제를 통한 Docker 이해

  • docker run dockerinaction/hello_world 명령 실행:
    1) 로컬에 이미지 없으면 Docker Hub에서 다운(pull)
    2) 이미지 기반으로 컨테이너 생성 후 "hello world" 출력 프로그램 실행
    3) 프로그램 종료 시 컨테이너도 종료
  • 두 번째 실행부터는 이미지를 다시 받을 필요 없이 즉시 컨테이너 실행 가능
  • 이 과정을 통해 Docker 이미지→컨테이너 생성→프로그램 실행의 기본 흐름 이해 가능

Docker를 언제, 어디서 사용할까?

  • 리눅스 기반 대부분 소프트웨어(서버 애플리케이션, CLI 도구 등) 컨테이너 실행 가능
  • 개발환경 통일, 배포 자동화, CI/CD 파이프라인 강화, 팀 온보딩 단축 등 다양한 상황에서 유용
  • 모든 경우에 이상적이지는 않으며, 특수한 하드웨어 접근이나 보안 요구사항 시 직접 실행 선택 가능

더 큰 생태계와 Kubernetes

  • Docker 외에도 컨테이너 생태계에는 오케스트레이션 도구(Kubernetes), 고가용성·로깅·모니터링 등 다양한 솔루션 존재
  • Docker+Kubernetes 조합으로 멀티호스트 오케스트레이션 가능
  • 복잡한 문제를 해결할 때는 다양한 도구와의 통합 고려

Docker 명령줄 도움말

  • docker helpdocker help <명령>으로 명령 사용법 확인 가능
  • 이를 통해 Docker CLI 명령어를 익히고, 컨테이너, 이미지, 볼륨, 네트워크 등 다양한 자원을 쉽게 관리할 수 있음

정리:
1장에서 Docker는 컨테이너 기술을 이용해 소프트웨어 설치·배포·실행 문제를 단순화하고, 이식성·보안·확장성·관리 효율성을 모두 개선하는 도구로 소개된다. "Hello, World" 예제를 통해 Docker의 기본 동작 방식을 직관적으로 파악할 수 있으며, Docker 생태계·명령어 활용법·추가 네트워크와 오케스트레이션 도구와의 결합 가능성까지 개괄한다. 이를 바탕으로 다음 장부터 더 깊은 Docker 활용법을 탐구할 수 있다.

'Docker' 카테고리의 다른 글

Docker in Action Chapter 3  (0) 2024.12.09
Docker in Action Chapter 2  (1) 2024.12.09
Docker 컨테이너 네트워킹  (1) 2024.12.04
도커 볼륨 (Docker Volumes)  (1) 2024.12.04
Surface Area  (0) 2024.12.04
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유