Docker는 기본적으로 /var/lib/docker 밑에 이미지 및 컨테이너 정보들을 저장해두는데, 부팅 디스크의 용량을 잡아먹는 괴물 중 하나다.
이걸 다른 드라이브로 옮기려면 아래와 같이 수행한다.
제일 먼저 docker 데몬이 돌아가고 있다면 그걸 멈춰준다.
sudo systemctl stop docker
그 다음, 제일 먼저 기존 파일들을 옮겨주는데 이때 만약을 위해서 rsync나 cp를 통해서 복사를 먼저 해주는걸 권장한다. mv 로 옮기다가 중간에 에러나거나 멈추면 골치아프다. 예를 들어서 /NEWHDD/docker 밑에 옮겨준다고 하면
sudo rsync -avxP /var/lib/docker /NEWHDD/docker
위 명령어를 통해서(**이렇게 하면 /NEWHDD/docker/docker 로 옮겨진다! 필자는 안전을 위해 항상 이렇게 한 다음 mv로 정리하는편) 파일들을 복사한 다음, 테스트를 위해서 아래와 같이 기존 폴더명을 바꿔준다
sudo mv /var/lib/docker /var/lib/docker_old
그 다음은 docker의 설정파일을 바꿔주면 되는데,
sudo vim /lib/systemd/system/docker.service
명령을 통해서 서비스 시스템 데몬 설정파일을 열면 아래와 같이 설정들이 있을텐데

여기서 ExecStart= ... 라고 되어있는 줄을 아래와 같이 -g 옵션을 추가해서 바꿔준다
ExecStart=/usr/bin/dockerd -g /NEWHDD/docker -H fd:// --containerd=/run/containerd/containerd.sock
그 다음 도커 데몬을 다시 실행시켜서 기존 이미지나 컨테이너가 잘 살아있는지 확인하고 용량을 차지하는 올드 폴더를 지우면 끝
sudo systemctl daemon-reload
sudo systemctl start docker
sudo docker ps -a
sudo docker image ls
sudo rm -rf /var/lib/docker_old
**service 설정파일 말고도, /etc/docker/daemon.json 을 고쳐주는 방법도 있다. 파일 복사, 도커 이미지 확인, 기존 폴더 삭제등은 동일하게 하는데 docker.service 파일을 수정하는 대신 아래와 같이 /etc/docker/daemon.json을 수정해준다.
{
"data-root": "/NEWHDD/docker"
}
위 구문을 추가해준다(만약 이미 중괄호가 있다면 그 안에 추가해준다. 아래처럼.).
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"data-root" : "/NEWHDD/docker"
}
댓글