숨 돌릴 여유: 원활한 Docker 배포를 위한 AWS EC2 스토리지 확장
Source: Dev.to
문제: 디스크 공간 부족
여러분의 EC2 인스턴스(특히 기본 8 GB로 시작한 경우)는 다음으로 빠르게 가득 찰 수 있습니다:
- Docker 이미지 – 각
docker compose build가 이미지 캐시에 레이어를 추가합니다. - 컨테이너 로그 – 기본 로깅조차도 기가바이트까지 증가할 수 있습니다.
- 데이터베이스 데이터 – PostgreSQL은 시간이 지남에 따라 더 많은 공간을 차지합니다.
- 애플리케이션 로그 및 캐시 – Django 내부 로깅이나 기타 캐시가 누적될 수 있습니다.
디스크 사용량이 **90 %**에 도달하면 시스템이 불안정해집니다. **100 %**가 되면 서버가 정상적으로 작동을 멈춥니다.
문제 식별: 확장 전
현재 디스크 상태를 확인하십시오. EC2 인스턴스에 SSH로 접속하고 다음을 실행합니다:
df -h
예시 출력 (확장 전)
Filesystem Size Used Avail Use% Mounted on
/dev/root 6.8G 4.7G 2.1G 70% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
...
/dev/root는 70 % 사용률로, 남은 용량이 2.1 GB에 불과합니다. 이는 Docker화된 애플리케이션에 대한 시한폭탄과 같습니다.
Source: …
해결책: EBS 볼륨 확장
이 과정은 두 가지 주요 단계로 구성됩니다:
- AWS에 더 많은 “하드웨어” 공간을 할당하도록 요청 (EBS 볼륨 수정).
- Linux에 새 공간을 인식하고 사용하도록 요청 (파티션 확장 및 파일시스템 크기 조정).
파트 1 – AWS 콘솔에서 볼륨 크기 늘리기
- AWS Management Console에 로그인합니다.
- EC2 → Elastic Block Store → Volumes로 이동합니다.
- 실행 중인 EC2 인스턴스에 연결된 EBS 볼륨을 선택합니다(보통 인스턴스 ID 또는 이름으로 표시됨).
- Actions → Modify Volume을 클릭합니다.
- 대화 상자에서 Size를 원하는 새 크기로 변경합니다(예: 8 GiB에서 20 GiB로).
- Modify를 클릭하고 확인합니다.
AWS가 새 공간 할당을 시작합니다. 볼륨 상태가 modifying에서 optimizing으로 변경됩니다. 최적화 중에도 다음 단계로 진행할 수 있으므로 완료를 기다릴 필요가 없습니다.
파트 2 – Ubuntu에서 파일시스템 확장
AWS가 공간을 추가했지만 Ubuntu는 여전히 이전 파티션 크기를 사용하고 있습니다. 메인 파티션(/dev/root)을 새로 사용 가능한 공간 전체로 확장해야 합니다.
새 디스크 크기 확인
lsblk
예시 출력 (AWS 수정 후, OS 확장 전)
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
nvme0n1 259:0 0 20G 0 disk
파티션 확장 및 파일시스템 크기 조정
# cloud‑init 도구가 없으면 설치
sudo apt-get update && sudo apt-get install -y cloud-guest-utils
# 파티션 확장 (여기서는 /dev/nvme0n1p1을 가정; 다르면 조정)
sudo growpart /dev/nvme0n1 1
# 파일시스템 확장 (ext4)
sudo resize2fs /dev/nvme0n1p1
확장 확인
df -h
이제 /dev/root에 대한 용량이 증가된 것을 확인할 수 있습니다.
요약
- AWS 콘솔에서 EBS 볼륨 크기 조정.
growpart를 사용하여 파티션 확장.resize2fs를 사용하여 파일 시스템 크기 조정.df -h로 새로운 공간 확인.- 향후 디스크 공간 부족 상황을 방지하기 위해 자동 Docker 정리 구현.
이러한 단계를 따르면 EC2의 Django 애플리케이션은 Docker 빌드, 로그 및 데이터베이스 성장에 충분한 저장 공간을 확보하게 되며, 정리 루틴을 통해 시간이 지나도 환경이 깔끔하게 유지됩니다.
Source:
Docker & System Cleanup Script
#!/bin/bash
# clean_docker.sh – Remove unused Docker resources and old journal logs
echo "Pruning Docker system (containers, images, build cache)..."
docker system prune -af
echo "Pruning Docker volumes..."
docker volume prune -f
echo "Cleaning up old system journal logs (older than 7 days)..."
sudo journalctl --vacuum-time=7d
echo "Disk cleanup complete."
df -h
1. 스크립트 저장
~/clean_docker.sh 파일을 만들고 위 스크립트를 붙여넣습니다. nano에서 저장하고 종료하려면:
Ctrl+O (Enter로 확인)
Ctrl+X
2. 스크립트 실행 권한 부여
chmod +x ~/clean_docker.sh
3. Cron으로 예약 실행
cron을 사용해 스크립트를 자동으로 실행하도록 설정합니다. 예를 들어 매주 일요일 자정에 실행하도록 합니다.
crontab -e
프롬프트가 나타나면 1을 선택해 nano를 사용합니다. 파일 가장 끝에 다음 줄을 추가합니다:
0 0 * * 0 /home/ubuntu/clean_docker.sh
설명
| 필드 | 의미 |
|---|---|
0 0 | 0시 0분 (자정) |
* * | 매월 매일 |
0 | 요일 0 (일요일) |
/home/ubuntu/clean_docker.sh | 정리 스크립트를 실행 |
저장하고 종료합니다 (Ctrl+O, Enter, Ctrl+X).
결론
이 단계들을 따라 하면:
- EC2 인스턴스의 스토리지를 확장했습니다.
- 사용되지 않는 Docker 리소스와 오래된 시스템 로그를 자동으로 제거하는 견고한 유지 관리 전략을 구현했습니다.
이제 Sioux Web App은 디스크 공간 고갈이라는 지속적인 위협 없이 효율적으로 실행될 수 있어, 사용자에게 보다 안정적이고 신뢰할 수 있는 경험을 제공합니다.