docker로 gitlab을 사용중인데 용량이 꽉차서 에러가 난적이 간혹 있었다.
용량이 꽉 찬 원인은 여러개가 있다
1. docker
이미지 용량, 빌드 시 레이어 및 캐시
2. gitlab
레포지토리 용량, 백업
3. gitlab-runner
이미지 빌드시 캐시, 빌드 아티팩트 저장
builds 폴더, cache 폴더
이미지 빌드시 캐시로 레이어가 쌓이기도 한다.
기본적으로 container 이미지를 빌드할때 캐시나 레이어를 이용해서 빠르게 빌드할 수 있다.
다만 너무 잦은 빌드와 아주 약간의 수정사항이 생기면
가끔 레이어나 캐시가 꼬여서 원하는 이미지가 생성이 안되는 경우도 있었다.
1. docker
불필요한 컨테이너나, 이미지를 정리할 수도 있다.
그런 경우가 아니라면 cache를 지우는 방법도 있다.
docker system df ( docker가 차지하는 디스크 정보 출력 )
TOTAL은 전체 갯수, ACTIVE는 현재 사용중인 항목
RECLAIMABLE은 지울 수 있는 용량이라고 보면 된다.
예를 들면 Images가 2개인데 하나만 사용중이고 총 사이즈 약 4GB에 RECALIMABLE이 약 1GB면
현재 사용중이지 않은 이미지의 용량이 약 1GB, 사용중인 이미지의 용량이 3GB라는 이야기이다.
그리고 아래에 보면 build Cache가 있다.
dockerfile 빌드시 명령어 마다 중간레이어가 생성되고 이것이 build Cache로 남는다고한다.
그리고 이후 이미지 빌드 시 Cache를 참조하기 때문에 빨라진다고 한다.
### 컨테이너 이미지 빌드 시 수정사항이 반영 안되는 경우 ###
빌드 속도가 빠르지만 단점도 있다.
COPY config.xml /home/test/config.xml
이 명령어를 실행하는 중간이미지가 있다고 했을때
config.xml의 내용을 수정하고 빌드를 진행해도 이전 내용이 올라가는 경우가 있었다.
cache를 지우고 다시 빌드하거나
도커파일에 'RUN echo" 같이 영향을 안주는 명령어를 추가하면
새롭게 이미지가 빌드되어 수정사항이 반영되는 것을 볼 수 있었다.
그래서 빌드할때 docker build --no-cache 이런식으로 cache를 사용하거나 남기지 않게해서
빌드하는 것도 하나의 방법이다.
docker builder prune -f 로 삭제
docker Build Cache가 삭제된 것을 확인할 수 있다.
/ 디렉토리의 용량이 3기가 정도 줄어든 것을 확인할 수 있다.
2. gitlab
깃랩 레포지토리 콘텐츠와, 백업 파일로 용량이 모자란 경우가 있을 수 있다.
백업의 경우 갯수를 제한하는 스크립트를 작성해서 조절이 가능하다.
3. gitlab-runner
깃랩 러너에서 이미지 빌드 시 생성되는 파일이나 캐시가 용량을 차지하기도 한다.
[[runners]]
name = " "
url = " "
token = " "
executor = "docker"
[runners.docker]
tls_verify = false
image = "ruby:2.1"
privileged = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
[[runners]]
name = " "
url = " "
token = " "
executor = "shell"
[runners.cache]
깃랩 설정파일에서 확인해보면
disable_cache = false로 되어있어서 캐시를 사용하도록 되어있다.
이것을 true로 해서 cache가 쌓이지 않게 하거나
빌드에 사용되는 컨텐츠가 따로 저장되지 않게 한다
또는 .gitlab-ci.y
build_job:
stage: build
script:
- echo "Building the project..."
- mkdir -p artifacts
- echo "Build output" > artifacts/output.txt
artifacts:
paths: []
위와 같이 artifacts의 경로를 설정하면, artifact가 저장되지 않는다
/home/gitlab-runner/builds 아래에 파일이 추가 되지 않았다.