티스토리 뷰

1. 문제 발생: 도커 볼륨이 꽉 참

Docker로 서버를 운영하다가 볼륨이 가득 차는 문제가 발생했다. 볼륨이 꽉 차면 새 컨테이너를 실행하거나 Docker 관련 작업을 할 수 없게 되기에 빠른 해결이 필요했다.

처음에는 이 문제가 Redis의 데이터를 저장하는 볼륨 때문이라고 생각했다. Redis는 데이터를 저장해야 하므로 볼륨을 사용하는데, 혹시 불필요한 볼륨이 계속 생성되고 있는 게 아닐까 의심이 되었다.

그러나 원인은 다른 곳에 있었다!


2. 원인 발견: 서버 실행 시 익명 볼륨 생성

Redis 문제를 확인하던 중, 예상치 못한 곳에서 진짜 원인을 발견했다. 서버 컨테이너 실행 시 사용된 -v /app 옵션이 불필요한 익명 볼륨을 계속 생성하고 있었다.

docker run -d --name ${server_name}-${green_port} --network $network_name -v /app -p ${green_port}:8080 -e TZ=Asia/Seoul ${user_name}/${server_name}

불필요한 익명 볼륨들

Docker에서 -v /app처럼 마운트 경로만 지정하고 볼륨 이름을 명시하지 않으면, 익명 볼륨이 자동으로 생성된다. 익명 볼륨은 컨테이너를 삭제해도 남아있기 때문에 시간이 지나면서 쌓여 디스크 용량을 차지하게 된 것이다.


 

3. 해결 방법: 두 가지 접근법

문제를 해결하기 위해 두 가지 방안을 생각해보았다.

방법 1: 네임드 볼륨 지정

익명 볼륨 대신 네임드 볼륨을 사용하면 문제가 해결된다. 네임드 볼륨은 이름을 지정하기 때문에 불필요하게 계속 생성되지 않으며, 필요할 때 관리가 더 쉽다.

네임드 볼륨 사용 예시

docker run -d --name ${server_name}-${green_port} --network $network_name -v kkum_volume:/app -p ${green_port}:8080 -e TZ=Asia/Seoul ${user_name}/${server_name}
  • 이 방법을 사용하면 kkum_volume이라는 이름의 볼륨이 한 번만 생성된다.
  • 이후 동일한 컨테이너를 실행하거나 재시작할 때 새로운 볼륨이 생성되지 않고, 기존의 kkum_volume을 재사용한다.

 

방법 2: 볼륨 사용 제거

서버 컨테이너 실행 시 볼륨이 필요하지 않다면, 아예 -v 옵션을 제거할 수도 있다. 이렇게 하면 볼륨이 생성되지 않으므로 익명 볼륨 문제도 완전히 사라지게 된다.

수정된 코드 (볼륨 사용 제거)

docker run -d --name ${server_name}-${green_port} --network $network_name -p ${green_port}:8080 -e TZ=Asia/Seoul ${user_name}/${server_name}

이 방법은 서버 컨테이너가 볼륨 없이도 정상적으로 동작할 경우에 적합하다.


4. 선택: 방법 2 채택

우리 서비스는 서버 컨테이너에서 데이터를 보존하거나 마운트할 필요가 없었기 때문에, 방법 2를 선택했다. -v 옵션을 제거하여 더 이상 익명 볼륨이 생성되지 않도록 스크립트를 수정했다.


5. 기존 불필요한 익명 볼륨 삭제

이후, 기존에 생성된 익명 볼륨들을 정리하기 위해 prune 명령을 사용했다:

docker volume prune

 

docker volume prune 명령은 더 이상 사용되지 않는(dangling) 볼륨을 모두 삭제한다. 이를 통해 기존에 쌓여 있던 익명 볼륨을 제거하고 디스크 공간을 확보했다!


6. 최종 결과: 스크립트 수정 완료 및 문제 해결

수정 전 (익명 볼륨 생성)

docker run -d --name ${server_name}-${green_port} --network $network_name -v /app -p ${green_port}:8080 -e TZ=Asia/Seoul ${user_name}/${server_name}

수정 후 (볼륨 사용 제거)

docker run -d --name ${server_name}-${green_port} --network $network_name -p ${green_port}:8080 -e TZ=Asia/Seoul ${user_name}/${server_name}

 

깨-끗

 

이제 서버 실행 시 불필요한 익명 볼륨이 더 이상 생성되지 않는다 ㅎㅎ!


결론

이 경험을 통해 Docker 볼륨 사용의 중요성을 다시 한 번 깨달을 수 있었다. 볼륨이 필요하지 않은 경우, 불필요한 옵션을 제거하는 것만으로도 Docker 환경을 더 효율적으로 관리할 수 있다. 앞으로도 상황에 맞는 볼륨 사용 전략을 세워 문제를 예방해야겠다!

 
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함