소개
이 포괄적인 튜토리얼은 Docker 컨테이너 관리의 중요한 측면을 탐구하며, 개발자 및 시스템 관리자에게 컨테이너 작업을 효과적으로 제어하고 최적화하는 필수 기술을 제공합니다. 컨테이너 수명 주기, 리소스 관리 및 운영 전략을 숙달함으로써 컨테이너화된 애플리케이션을 정확하고 효율적으로 배포, 모니터링 및 확장하는 능력을 향상시킬 수 있습니다.
Docker 컨테이너 기본
Docker 컨테이너란 무엇인가?
Docker 컨테이너는 애플리케이션 실행에 필요한 모든 것을 포함하는 경량의 독립 실행형 실행 패키지입니다. 코드, 런타임, 시스템 도구, 라이브러리 및 설정이 포함됩니다. 가상 머신과 달리 컨테이너는 하드웨어 대신 운영 체제를 가상화하여 더욱 효율적이고 휴대 가능합니다.
주요 컨테이너 특징
| 특징 | 설명 |
|---|---|
| 격리 | 컨테이너는 격리된 환경에서 실행됩니다 |
| 경량성 | 최소한의 리소스 소비 |
| 휴대성 | 다양한 플랫폼에서 일관되게 실행 가능 |
| 확장성 | 쉽게 확장 또는 축소 가능 |
컨테이너 아키텍처
graph TD
A[Docker 이미지] --> B[컨테이너 레이어]
B --> C[기본 이미지 레이어]
D[컨테이너 런타임] --> B
기본 Docker 컨테이너 명령어
이미지 가져오기
docker pull ubuntu:22.04
컨테이너 생성 및 실행
docker run -it --name my-container ubuntu:22.04 /bin/bash
컨테이너 목록
## 실행 중인 컨테이너 목록
docker ps
## 모든 컨테이너 목록
docker ps -a
컨테이너 수명 주기 상태
stateDiagram-v2
[*] --> Created
Created --> Running
Running --> Paused
Paused --> Running
Running --> Stopped
Stopped --> Removed
Removed --> [*]
권장 사항
- Docker Hub 에서 공식 이미지 사용
- 컨테이너 경량화 유지
- 다단계 빌드 사용
- 적절한 컨테이너 로깅 구현
- 컨테이너 리소스 효율적으로 관리
LabEx 를 이용한 학습
LabEx 는 개발자가 실제 환경에서 컨테이너 기술을 연습하고 이해하는 데 도움이 되는 실습 Docker 컨테이너 환경을 제공합니다.
컨테이너 수명 주기 제어
컨테이너 상태 관리
Docker 컨테이너는 여러 상태를 가지며, 특정 명령을 통해 제어할 수 있습니다. 이러한 상태를 이해하는 것은 효과적인 컨테이너 관리에 필수적입니다.
컨테이너 상태 개요
stateDiagram-v2
[*] --> Created
Created --> Running: docker run
Running --> Paused: docker pause
Paused --> Running: docker unpause
Running --> Stopped: docker stop
Stopped --> Removed: docker rm
Removed --> [*]
주요 컨테이너 수명 주기 명령어
| 명령어 | 동작 | 설명 |
|---|---|---|
docker create |
생성 | 컨테이너를 시작하지 않고 준비합니다 |
docker start |
시작 | 중지된 컨테이너를 시작합니다 |
docker run |
생성 + 시작 | 컨테이너를 생성하고 즉시 시작합니다 |
docker stop |
중지 | 실행 중인 컨테이너를 정상적으로 중지합니다 |
docker restart |
재시작 | 컨테이너를 중지한 후 다시 시작합니다 |
docker pause |
일시 중지 | 컨테이너 내 모든 프로세스를 일시 중지합니다 |
docker unpause |
일시 중지 해제 | 일시 중지된 프로세스를 다시 시작합니다 |
docker rm |
삭제 | 중지된 컨테이너를 삭제합니다 |
실제 예제
컨테이너 생성 및 관리
## 새로운 컨테이너 생성
docker create --name web-app nginx:latest
## 컨테이너 시작
docker start web-app
## 컨테이너 중지
docker stop web-app
## 컨테이너 삭제
docker rm web-app
고급 옵션으로 컨테이너 실행
## 분리된 모드로 컨테이너 실행
docker run -d --name background-app ubuntu:22.04 sleep 3600
## 대화형 쉘로 컨테이너 실행
docker run -it --name test-container ubuntu:22.04 /bin/bash
컨테이너 재시작 정책
flowchart LR
A[Restart Policy] --> B{Policy Types}
B --> |no| C[재시작 안 함]
B --> |always| D[항상 재시작]
B --> |on-failure| E[실패 시 재시작]
B --> |unless-stopped| F[수동 중지되지 않는 한 재시작]
재시작 정책 구현
## 항상 컨테이너 재시작
docker run -d --restart=always nginx:latest
## 최대 재시작 횟수를 가진 실패 시 재시작
docker run -d --restart=on-failure:5 web-application
고급 수명 주기 관리
정상 종료
## 컨테이너에 특정 시그널 전송
docker kill --signal=SIGTERM web-container
컨테이너 수명 주기 모니터링
## 컨테이너 이벤트 감시
docker events
## 컨테이너 세부 정보 확인
docker inspect web-container
권장 사항
- 적절한 재시작 정책 사용
- 적절한 컨테이너 정리 구현
- 컨테이너 상태 모니터링
- 볼륨 관리를 통해 데이터 지속성 확보
- 복잡한 애플리케이션을 위해 Docker Compose 활용
LabEx 를 이용한 학습
LabEx 는 컨테이너 수명 주기 관리를 연습할 수 있는 대화형 환경을 제공하여 개발자가 Docker 컨테이너 제어 기술을 숙달할 수 있도록 지원합니다.
컨테이너 리소스 관리
컨테이너 리소스 이해
컨테이너 리소스 관리 (Container Resource Management) 는 성능 최적화, 공정한 리소스 할당, 시스템 과부하 방지에 필수적입니다.
리소스 관리 차원
mindmap
root((컨테이너 리소스 관리))
CPU
Limits
Shares
Memory
Hard Limit
Soft Limit
Network
Bandwidth
Connection Limits
Storage
Disk I/O
Volume Quotas
CPU 리소스 제어
CPU 할당 전략
| 전략 | 설명 | Docker 플래그 |
|---|---|---|
| CPU Shares | 상대적인 CPU 시간 할당 | --cpu-shares |
| CPU 코어 | 특정 CPU 코어 제한 | --cpuset-cpus |
| CPU Period | CPU 할당 시간 제어 | --cpu-period |
| CPU Quota | CPU 사용량 백분율 제한 | --cpu-quota |
CPU 리소스 예시
## 컨테이너를 CPU 코어의 50%로 제한
docker run -d --cpus=0.5 nginx:latest
## 컨테이너를 특정 CPU 코어에 할당
docker run -d --cpuset-cpus="0,1" web-app
## CPU Shares 설정 (기본값은 1024)
docker run -d --cpu-shares=512 background-service
메모리 관리
메모리 할당 기법
## 하드 메모리 제한 설정
docker run -d --memory=500m nginx:latest
## 소프트 메모리 제한과 예약 설정
docker run -d --memory=1g --memory-reservation=750m web-app
## 컨테이너가 과도한 메모리를 사용하는 것을 방지
docker run -d --oom-kill-disable=false --memory=500m app
스토리지 및 I/O 관리
flowchart LR
A[스토리지 관리] --> B[Volumes]
A --> C[Bind Mounts]
A --> D[Tmpfs Mounts]
B --> E[지속적 스토리지]
C --> F[호스트 시스템 통합]
D --> G[임시 메모리 스토리지]
스토리지 할당 명령어
## 이름이 지정된 볼륨 생성
docker volume create app-data
## 컨테이너에 볼륨 마운트
docker run -v app-data:/app/data nginx:latest
## 컨테이너의 디스크 I/O 제한
docker run --device-write-bps /dev/sda:10mb web-app
네트워크 리소스 제어
## 네트워크 대역폭 제한
docker run --net-alias=limited-network \
--network-bandwidth=100kbps \
web-service
## 네트워크 연결 제한 제어
docker run --ulimit nproc=50 app-container
리소스 사용량 모니터링
Docker 리소스 모니터링 명령어
## 실시간 컨테이너 리소스 통계
docker stats
## 컨테이너 리소스 구성 확인
docker inspect --format '{{.HostConfig.Memory}}' container-name
리소스 관리 권장 사항
- 적절한 리소스 제한 설정
- 리소스 예약 사용
- 컨테이너 성능 모니터링
- 다단계 빌드 구현
- 복잡한 구성을 위해 Docker Compose 사용
고급 리소스 관리 도구
| 도구 | 용도 |
|---|---|
| cAdvisor | 컨테이너 모니터링 |
| Prometheus | 메트릭 수집 |
| Grafana | 시각화 |
LabEx 를 이용한 학습
LabEx 는 고급 Docker 리소스 관리 기법을 실습할 수 있는 포괄적인 환경을 제공하여 개발자가 컨테이너 성능과 효율을 최적화할 수 있도록 지원합니다.
요약
현대 소프트웨어 개발 및 배포를 위해 Docker 컨테이너 작동 원리를 이해하는 것은 필수적입니다. 이 튜토리얼은 컨테이너 수명 주기 관리, 리소스 제어 및 최적의 실무를 구현하는 기본적인 기술을 갖추도록 돕습니다. 이러한 기술을 적용하여 개발 및 운영 워크플로우를 간소화하는 더욱 강력하고 확장 가능하며 효율적인 컨테이너화된 환경을 만들 수 있습니다.



