jetson tx2에서 작업을 하려다 기본 용량이 32GB 밖에 안되어 용량이 부족하다 생각해
docker image를 외부 저장 장치에 저장하기 위한 방법을 알아 보고 이를 정리 한다.
이 포스팅의 목적:
docker image의 기본 저장 위치를 외부 저장 장치인 sd카드로 영구적으로 바꾸는 방법을 알아 본다.
환경:
docker version: Docker version 20.10.2, build 20.10.2-0ubuntu1~18.04.2
os: ubuntu 18.04
step 1. 도커 기본 저장 디렉토리 확인
일반적으로 도커의 기본 이미지 저장 디렉토리는 /var/lib/docker 이다.
아래 명령으로 확인할 수 있다.
docker info
위 명령입력시 아래와 같은 화면을 볼수 있는데 노란색으로 표시한 Docker Root Dir가 우리가 image등을 pull 하면 기본적으로 저장되는 위치이다.
우리의 목표는 위에 명시 했듯 이 위치를 저장공간이 풍부한 외부 디바이스로 재 지정하는 것이다.
step 2. 도커 서비스 정지지
목적을 위해 가장 먼저 해야 할 일은 도커 서비스를 정지 하는 것이다. 아래 명령으로 도커 서비스를 정지하고 정지된 상태를 확인할 수 있다.
바로 밑의 그림은 systemctl status docker의 결과 화면 이다. 3번째 라인에서 Active: inactive 라고 확인 할 수 있다.
sudo systemctl stop docker
sudo systemctl status docker
step 3. 외부 저장장치 마운트 위치 확인
다음으로 할 일은 외부 저장 장치를 마운트 하는 것이다. 나는 이 외부 저장 장치를 영구적으로 docker의 root dir로 사용 할 것이므로
이 장치가 항상 고정된 위치에 마운트 되게 설정할 것이다.
우선 마운트 할 저장 장치의 이름을 확인 하기 위해 아래 명령을 입력한다.
df -h
위 명령의 결과 화면은 아래 그림과 같다. 노란색으로 표시한게 외부 저장장치 이고 녹색으로 표시한게 현재 마운팅된 위치이다.
나는 기존에 작업을 해놔서 /mnt/ant/antvolume으로 마운트 되었는데 마운팅 되는 위는 각자 알아서 만들면 된다.
단 마운트 할 위치를 반드시 기억하기 바란다.
마운트 할 위치 만드는 법:
참고로 마운트 할 위치를 나는 다음 명령어로 미리 만들어 두었다.
sudo mkdir -p /mnt/ant/antvolume
step 4. 마운트 위치 고정을 위한 /etc/fstab 파일 변경
(이 파일에 마운트할 devicde 파일을 잘 못 기입하면 부팅시 이를 찾지 못해 문제가 발생할 수 있으니 조심하자. 일반 적으로 uuid를 사용하지만 나는 그냥 device 파일 경로로 사용했다.)
UUID 확인 방법
sudo blkid
아래 결과 화면의 흰색이 내 sd카드의 uuid를 확인 할수 있는 부분이다.
sudo vim /etc/fstab
위 명령을 입력해 파일을 열고 아래 그림의 노란 부분과 같이 파일 시스템과 마운팅 위치를 입력한다. type을 주의 해서 설정해야 한다.
내 경우 위 step 3에서 확인한 디바이스 파일(파일 시스템)과 마운트 위치를 이용했다.
5. 도커 기본 저장 경로 변경
도커의 기본 저장 경로를 바꾸기 위해 '/etc/docker/daemon.json' 파일을 변경해야 한다.
간단히 'data-root'를 항목을 추가 하면 된다. 옛 버전에서는 'graph'라는 항목을 추가 했어야 하는데 현 버전에서는 'data-root'로 바뀌었다.
입력 방식은 아래와 같다.
"data-root": "/path/to/newdir"
아래는 입력을 마친 내 파일이다. 노란 부분이 추가한 부분이다.
6. 바뀐 설정 사용
6.1 재부팅 없이 사용 하기
바꾼 도커 root dir을 사용 하기 위해 일단 파일시스템을 정해진 위치에 마운트 시키고 도커를 재시작한다.
mount -a 를 하는 이유는 step 3에서 확인 한 파일시스템의 마운트 경로와 step 4, step 5 에서 지정한 파일 시스템 위치가 다를 경우를 위한 것이다. 나와 같이 이미 마운트 되어있는 위치를 그대로 사용한 경우 mount -a 는 필요 없다.
sudo mount -a
sudo systemctl restart docker
6.2 재부팅 하기
재부팅 하면 알아서 fstab 파일에 있는 파일시스템이 마운팅 되므로 추가 명령이 필요 없다.
결과:
step 1처럼 아래 명령을 입력해 root dir이 변경 되었는지 확인해 보자. 아래 그림의 노란색 부분을 보면 step 1과는 다르게 내가 원하는 위치로 변경된 것을 확인 할 수 있다.
docker info