Docker 컨테이너 관리와 운영 모범 사례
컨테이너 기술은 현대 애플리케이션 배포의 표준이 되었습니다. Docker를 효율적으로 운영하기 위해서는 단순히 컨테이너를 실행하는 것을 넘어, 체계적인 관리와 모니터링이 필요합니다.
컨테이너 생명주기 관리
컨테이너 실행과 종료
# 백그라운드에서 컨테이너 실행
docker run -d --name myapp -p 8080:80 nginx
# 컨테이너 재시작 정책 설정
docker run -d --restart unless-stopped myapp
# 모든 중지된 컨테이너 제거
docker container prune
리소스 제한 설정
# CPU와 메모리 제한
docker run -d \
--memory="512m" \
--memory-swap="1g" \
--cpus="1.5" \
--name limited-app nginx
# 디스크 I/O 제한
docker run -d \
--device-read-bps /dev/sda:1mb \
--device-write-bps /dev/sda:1mb \
redis
데이터 영속성 관리
볼륨 관리
# 명명된 볼륨 생성
docker volume create app-data
# 볼륨 목록 확인
docker volume ls
# 사용되지 않는 볼륨 정리
docker volume prune
# 볼륨 상세 정보
docker volume inspect app-data
바인드 마운트 vs 볼륨
# 바인드 마운트 (개발 환경)
docker run -d \
-v $(pwd)/src:/app \
-v $(pwd)/config:/etc/app \
myapp:dev
# 볼륨 마운트 (운영 환경)
docker run -d \
-v app-data:/data \
-v app-logs:/var/log \
myapp:prod
네트워크 관리
사용자 정의 네트워크
# 브리지 네트워크 생성
docker network create --driver bridge app-network
# 여러 컨테이너를 동일 네트워크에 연결
docker run -d --name db --network app-network mysql
docker run -d --name api --network app-network --link db:mysql myapi
# 네트워크 상세 정보
docker network inspect app-network
이미지 관리 전략
이미지 최적화
# 사용하지 않는 이미지 확인
docker images -f "dangling=true"
# 미사용 이미지 제거
docker image prune -a
# 이미지 히스토리 확인
docker history myapp:latest
# 이미지 크기 분석
docker images --format "table \t\t"
레지스트리 관리
# 이미지 태그 및 푸시
docker tag myapp:latest registry.example.com/myapp:v1.0
docker push registry.example.com/myapp:v1.0
# 프라이빗 레지스트리 로그인
docker login registry.example.com
로그 및 모니터링
컨테이너 로그 관리
# 실시간 로그 확인
docker logs -f --tail 100 myapp
# 특정 시간 범위의 로그
docker logs --since 1h --until 5m myapp
# 로그 드라이버 설정
docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
myapp
리소스 모니터링
# 실행 중인 컨테이너 통계
docker stats --all --format "table \t\t"
# 상세 이벤트 모니터링
docker events --filter event=start --filter event=stop
보안 설정
보안 옵션
# 루트가 아닌 사용자로 실행
docker run -d --user 1000:1000 myapp
# 읽기 전용 파일시스템
docker run -d --read-only --tmpfs /tmp --tmpfs /var/run myapp
# 커널 기능 제한
docker run -d --cap-drop ALL --cap-add NET_BIND_SERVICE myapp
# 보안 프로필 적용
docker run -d --security-opt seccomp=default.json myapp
Docker Compose 운영
프로덕션 설정
version: '3.8'
services:
web:
image: nginx:alpine
deploy:
replicas: 3
resources:
limits:
cpus: '0.5'
memory: 256M
restart: unless-stopped
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
db:
image: postgres:14-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
volumes:
pgdata:
secrets:
db_password:
external: true
효율적인 Docker 컨테이너 관리는 애플리케이션의 안정성과 보안을 위해 필수적입니다. 리소스 제한, 데이터 영속성, 네트워크 격리, 로그 관리 등의 모범 사례를 적용하여 운영 환경에서 컨테이너를 안전하게 관리하세요.
댓글남기기