문제
계속 develop에 코드를 머지하고 CI/CD가 정상적으로 돌아갔음에도 Swagger에서 해당 API가 나오지 않는 현상이 나타났다. 분명히 controller에 추가했음에도 Swagger 어디에서도 찾아볼 수가 없었다. 아무래도 서버에 반영되지 않는 것 같았다….
고민 1 - 캐시문제?
Docker를 빌드할 때 기존의 Image 레이어가 캐시로 남아서 그런 현상이 있을 가능성이 있다는 글을 보았다.
해당 현상은 아래의 명령어로 해결할 수 있다.
docker build --no-cache -t ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_IMAGENAME }} .
그런데 나는 아무리 생각해도 이 문제는 아닐 것 같다는 느낌이 들었다. 이런 이슈가 없었던 다른 프로젝트들의 Workflow를 모두 뒤져봤는데 저렇게 직접 캐시를 지워주는 코드는 단 하나도 없었다. 그리고 캐시를 매번 지우면 성능면에서 떨어질 것 같아 이 방법은 최후의 방법으로 보류하기로 했다.
고민 2 - EC2 용량 문제(해결)
왜 코드가 최신 코드가 아닐까…. 이미지가 최신의 이미지로 갱신되지가 않나...? 라는 생각에 아래 명령어를 쳐봤다.
sudo docker images
해당 명령어를 입력하면 아래 사진처럼 image 들의 상세정보를 알 수 있다.
여기서 CREATED가 7 hours ago로 나온걸 확인할 수 있었다…. 나는 2시간 전에 머지했는데….
Workflow를 계속 살펴봤지만 아무리 봐도 코드에 이상은 없는 것 같았다. 그래서 Github Action으로 들어가봤다.
그런데 EC2 Connection을 하는 시점에 err: write /var/lib/docker/tmp/GetImageBlob00004099: no space left on device 라는 메시지를 확인할 수 있었다.
해당 메시지로 Docker image를 우리 EC2에 올리는 시점에서 용량 문제가 있음을 추측할 수 있었다.
EC2 프리티어 요금제로 사용하고 있어서 적은 용량만 사용할 수 있어 이런 이슈가 난 것 같다.
아래 명령어를 통해 현재 용량이 얼마나 남았는지 확인할 수 있다.우선 /dev/xvda에서 대부분의 용량을 차지하고 있는 것을 확인할 수 있었다.
df -h
그리고 아래 명령어를 치면 Docker 디스크 사용량을 자세하게 볼 수 있다.
sudo docker system df -v
아래 사진처럼 우리 서버에서 컨테이너는 하나지만 사용하지 않는 이미지들이 제거되지 않고 용량을 차지하는 것을 확인할 수 있었다.
해결
아래 명령어로 안쓰는 리소스들을 제거해주었다.
sudo docker system prune -a -f
위의 명령어는 안 쓰는 모든 리소스들을 정리하는 명령어인데, 만약에 이미지 혹은 컨테이너 등등 특정 리소스만 제거하고 싶으면 아래 명령어 중 하나를 택해서 사용하면 된다.
sudo docker container prune -f // 컨테이너만 제거
sudo docker image prune -f // image 제거
sudo docker network prune -f // network 제거
우리의 경우 사용하는 Container, Image는 한 개뿐이고 CI/CD를 돌리는 과정에서 없으면 자동으로 생성해주게끔 만들어서 데이터 유실의 염려는 없었다. 만약에 없어지면 안되는 데이터가 있다면 명령어 사용에 주의하도록 하자.
용량 정리를 해주니 최신 이미지가 정상적으로 올라가는 것을 확인할 수 있었다. ^-^
내가 구축한 CI/CD가 아니라서 워크 플로우 파일에 손대지는 못했지만, 우리의 경우 Image를 하나만 사용하고 있어서 Docker Image를 올릴 때 기존의 Image를 제거해주는 명령어를 추가해야할 것 같다. 수동으로 이렇게 일일히 용량 정리를 할 수는 없으니…
그리고 지금은 Image의 tag를 따로 설정하지 않아서 default tag를 사용하고 있는데, 만약에 멀티모듈을 사용한다거나 dev와 prod 프로젝트를 나눈다거나 해서 서로 다른 Image들을 동시에 올려야할 일이 생길 수도 있을 것 같다. 이런 상황을 대비해서 Image 식별값인 tag를 설정해줄 필요가 있을 듯하다.
'이슈' 카테고리의 다른 글
[이슈/Infra] EC2가 지속적으로 터지는 문제 (0) | 2024.12.31 |
---|---|
[이슈/Redis] Unable to connect to Redis (로컬) (0) | 2024.08.23 |
[이슈/Docker] Docker hub 사이트 sign In 버튼 클릭시 Access_denied We found an existing Docker account..(생략) 문제 (1) | 2024.08.23 |
[이슈/IntelliJ] 잘 되던 프로젝트가 빌드 안되는 문제 (Cannot resolve symbol) (0) | 2024.08.23 |
[이슈/MySQL] "Access denied for user 'root'@'localhost' (using password: NO)" (0) | 2024.08.23 |