[Docker] Docker Image Layer 수정해서 용량 줄이기 [Fail]

Chan Kim·2023년 8월 6일
1
post-thumbnail

아래 내용은 실패한 결과물 입니다. 같은 문제 해결을 위해 들어왔다면 돌아가셔야합니다..

앞으로 인공지능을 개발할 기본 환경을 위해 Docker Image를 세팅하고 있었는데, 여러 시행착오 끝에 드디어 환경설정이 완료됐다.

1. OS SETUP
2. CUDA BUILD
3. CUDNN BUILD
4. OPENCV BUILD

그리고 이 컨테이너를 시작으로, 앞으로 모든 프로젝트의 기본 환경같은 느낌으로 사용하려했는데..... Docker Image 용량이 35.3GB?

뭔가 이상하다 싶어 Docker Image의 Layer를 확인해보니...

중복되는 내용을 가진 Layer도 많은데, 특히 bash관련된 Layer는 엄청난 용량을 먹고있었다.

여기서 가장 먼저 수정이 필요하다고 느낀 부분들은 아래와 같다.

1. /bin/bash
2. RUN |1 TARGET ....

얘네 두개만 중복 제거해도 용량이 굉장히 많이 줄어들 것 같았다.
그래서 Layer를 수정해보려 했으나.... docker는 COW(Copy-On-Write)기능을 사용하기 때문에 수정은 불가능하고 Layer를 추가만 할 수 있다.
그럼 정녕 처음부터 다시 깡으로 빌드하고 환경세팅을 해야할까?

그래서 방법을 찾아보았다.

docker image save

먼저 docker image를 tar로 저장해주자.

docker save -o {image_name}.tar {image_name}:{image_tag}

tar로 저장된 파일을 압축을 풀어주자.

tar -xvf {image_name}.tar

압축 푼 디렉토리들의 용량을 확인해보자.

du -h

찾았다. 아까 중복되었던 /bin/bash중, 19G와, RUN |1 TARGET ....중 2.0G 파일 두개를 지우자.

이 두개를 지우고, 압축 풀며 나온 json파일에도 Layer를 지워주자.
근데, sha256으로 암호화가 되어있다. SHA-256은 단방향 암호화이기 때문에 복호화가 불가능하다.
그럼 여기서 포기해야할까?
나는 아까 디렉토리 용량을 조회했을 때 순서가 의미있다고 생각했다.(뇌피셜)
따라서, 인덱스를 따라 지워봤다. 4번째 인덱스, 10번째 인덱스.

그리고, 맨처음 나와있던 Layer에 해당하는 명령들도 지워줬다.

또.. manifest.json에서도 지운 Layer를 제거해줬다.
여기는 파일 명으로 되어있어서 찾기 쉬웠다.

그리고 이 디렉토리를 다시 tar로 압축해서 docker image를 올리면 될 것 같다고 생각했다.

tar -cvf {image_name}.tar {image_name}

실패했다. 무슨 파일이나 디렉토리를 찾기 못했다고 한다.

Docker Image를 새로 만드는게 더 빠를 거 같다.
삽질하지 말자..

profile
배울수록 반성하는 개발자

2개의 댓글

comment-user-thumbnail
2023년 8월 29일

한입하고 갑니다

1개의 답글