1. 컨테이너란 무엇인가
컨테이너의 정의
- 서비스의 추상화
- 서비스를 오래 안정적으로 운영하기 위해 자동화를 위한 추상화 계층
→ 이것이 곧 DevOps의 핵심 개념
컨테이너의 핵심 특징
- 격리 (Isolation)
- 다른 컨테이너와 프로세스/자원 충돌 없음
- 추상화 (Abstraction)
- 실행 환경(OS, 라이브러리, 설정)을 하나의 단위로 묶음
비유
- 거실 = OS Kernel (공통, 격리됨)
- 각 방 = 컨테이너
- 각자 독립된 환경에서 서비스 실행
2. 서비스 관점에서의 요구사항
DB 사용 시 고려사항
- 요구사항에 따라 DB 선택이 달라짐
- Redis vs Memcached
- 요구사항에 따라 다음이 결정됨
- 성능 사양
- 메모리/스토리지 용량
- 지속성 여부
3. 이미지(Image)란 무엇인가
이미지의 정의
- 여러 개의 레이어(layer)로 구성된 불변 객체
- 레이어가 쌓이며 이미지가 만들어짐
레이어 특징
- 레이어가 중첩될 경우
- 항상 최신 레이어 기준으로 사용
- 모든 이미지 레이어는 Read-Only
- 변경 불가 (Immutable)
4. Dockerfile → Image → Container 흐름
Dockerfile → Image → Container
(설계도) (빵틀) (서비스)
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 실행 과정
- 이미지 다운로드
- 중복 레이어는 다운로드하지 않음
- 컨테이너 생성
- 메인 프로세스로 /bin/bash 실행
- /bin/bash 종료
- 메인 프로세스 종료
- 컨테이너 종료
10. 실행 옵션 정리
-it
- 터미널 입력 유지
- 컨테이너가 종료되지 않고 대기 상태 유지
-d
- 백그라운드 실행
- 터미널과 분리됨
옵션 조합
- -it : 터미널과 연결된 대화형 실행
- -d : 백그라운드 실행
- -itd :
- 대기 상태 유지
- 백그라운드 실행
- 터미널과 분리
'Docker' 카테고리의 다른 글
| Docker_Cloudwave캠프: Stateful 컨테이너와 로그 파이프라인 (0) | 2026.01.02 |
|---|---|
| Docker_Cloudwave 캠프: Dockerfile 구조와 이미지 빌드 원리 (0) | 2025.12.31 |
| Docker: 다중 컨테이너 구축 (2) | 2025.05.28 |
| Docker: 네트워킹 (1) | 2025.05.22 |
| Docker: 데이터 관리 및 볼륨 (1) | 2025.05.19 |