Docker_Cloudwave 캠프: Docker 기본 개념과 컨테이너 실행 구조

1. 컨테이너란 무엇인가

컨테이너의 정의

  • 서비스의 추상화
  • 서비스를 오래 안정적으로 운영하기 위해 자동화를 위한 추상화 계층
    → 이것이 곧 DevOps의 핵심 개념

컨테이너의 핵심 특징

  1. 격리 (Isolation)
    • 다른 컨테이너와 프로세스/자원 충돌 없음
  2. 추상화 (Abstraction)
    • 실행 환경(OS, 라이브러리, 설정)을 하나의 단위로 묶음

비유

  • 거실 = OS Kernel (공통, 격리됨)
  • 각 방 = 컨테이너
    • 각자 독립된 환경에서 서비스 실행

2. 서비스 관점에서의 요구사항

DB 사용 시 고려사항

  • 요구사항에 따라 DB 선택이 달라짐
    • Redis vs Memcached
  • 요구사항에 따라 다음이 결정됨
    • 성능 사양
    • 메모리/스토리지 용량
    • 지속성 여부

3. 이미지(Image)란 무엇인가

이미지의 정의

  • 여러 개의 레이어(layer)로 구성된 불변 객체
  • 레이어가 쌓이며 이미지가 만들어짐

레이어 특징

  • 레이어가 중첩될 경우
    • 항상 최신 레이어 기준으로 사용
  • 모든 이미지 레이어는 Read-Only
  • 변경 불가 (Immutable)

4. Dockerfile → Image → Container 흐름

 
Dockerfile → ImageContainer
  (설계도)        (빵틀)       (서비스)

Dockerfile

  • 무엇을 변경할지 정의하는 설계도
  • 주요 내용
    • FROM (베이스 이미지)
    • 언어 설치 (예: Python)
    • 패키지 업데이트
    • 소스코드 복사

Image

  • Dockerfile을 build한 결과물
  • 언어, 라이브러리, 패키지가 포함됨
  • 여러 레이어로 구성됨

Container

  • Image를 실행한 결과
  • 환경변수 및 설정값이 추가됨
  • 실제 서비스를 제공하는 실행 단위

5. Container Layer 구조

이미지 레이어

  • Read-Only
  • 불변 (Immutable)

컨테이너 레이어

  • 최상위 레이어
  • Read-Write 가능
  • 실행 중 변경되는 값은 모두 여기에 저장됨

6. Docker Hub와 이미지 다운로드 방식

  • Docker Hub는 이미지 자체가 아니라 Manifest(설계 정보)를 보유
  • 로컬에 없는 레이어만 다운로드
  • 이미 존재하는 레이어는 다운로드 스킵

중요 포인트

  • Docker와 로컬이 통신(push/pull)할 때
    • 이미지가 아니라 레이어 단위로 전송

7. Container = Service = Process

컨테이너의 본질

  • 컨테이너는 하나의 서비스
  • 하나의 Main Process
    • PID = 1
  • 표준 입출력 사용
    • STDIN
    • STDOUT
    • STDERR

8. attach vs exec 차이

attach

  • PID 1 (메인 프로세스)에 직접 연결
  • 컨테이너 내부에서 작업 후 exit 하면
    • 컨테이너 자체가 종료됨

exec

  • PID 1이 아닌 새로운 프로세스로 접근
  • 메인 프로세스에는 영향 없음

9. docker run ubuntu:22.04 /bin/bash 실행 과정

  1. 이미지 다운로드
    • 중복 레이어는 다운로드하지 않음
  2. 컨테이너 생성
  3. 메인 프로세스로 /bin/bash 실행
  4. /bin/bash 종료
  5. 메인 프로세스 종료
  6. 컨테이너 종료

10. 실행 옵션 정리

-it

  • 터미널 입력 유지
  • 컨테이너가 종료되지 않고 대기 상태 유지

-d

  • 백그라운드 실행
  • 터미널과 분리됨

옵션 조합

  • -it : 터미널과 연결된 대화형 실행
  • -d : 백그라운드 실행
  • -itd :
    • 대기 상태 유지
    • 백그라운드 실행
    • 터미널과 분리