홈 › 리눅스 운영 › 13 / 13

Docker 실무

Dockerfile·다단계 빌드·실행 옵션·Compose·레지스트리·폐쇄망 반입 (podman 대응)
섹션 7진행 0 / 13

4. 응용 변형 예제

4.1 Compose 로 app + web + db 묶기

yaml
services:
  app:
    build: .
    mem_limit: 512m
    healthcheck:
      test: ["CMD-SHELL", "bash -c 'cat < /dev/null > /dev/tcp/localhost/8080'"]
  web:
    image: nginx:1.27
    depends_on:
      app:
        condition: service_healthy
  db:
    image: postgres:16
    profiles: ["with-db"]

db 서비스는 profiles 로 묶어 docker compose --profile with-db up 처럼 필요할 때만 띄웁니다. Oracle 이 필요하면 db 의 이미지를 gvenzl/oracle-free 로 바꿉니다.

4.2 로그 드라이버 크기 제한

bash
docker run -d --log-opt max-size=10m --log-opt max-file=3 study/app:1.0

max-size 는 로그 파일 하나의 최대 크기, max-file 은 보관할 파일 개수입니다. 둘을 곱한 크기가 컨테이너 하나당 로그가 차지할 최대 디스크입니다.

4.3 Windows Docker Desktop 볼륨 성능

bash
docker run -v //c/project/app:/app study/app:1.0

Windows 경로를 WSL2 컨테이너에 마운트하면 파일 I/O 가 느려질 수 있습니다. 빌드 산출물처럼 자주 읽고 쓰는 폴더는 WSL2 내부(\\wsl$\...)에 두는 편이 빠릅니다.

4.4 이미지 취약점 점검

bash
docker scout cves study/app:1.0

Docker Desktop 에 내장된 docker scout 로 알려진 취약점(CVE)을 이미지 안에서 검사합니다. 베이스 이미지 태그를 최신 패치 버전으로 올리는 것만으로 상당수가 해결됩니다.

4.5 디스크 정리

bash
docker system df
docker system prune -a

df 로 이미지·컨테이너·볼륨이 차지한 용량을 먼저 확인합니다. prune -a 는 사용하지 않는 이미지까지 지우므로 운영 서버에서는 신중히 씁니다.