티스토리 뷰

개발/docker

docker 데이터 디렉터리 변경

Jaeyeon Baek 2019.05.27 12:02

(*) 우분투 16.0.4 환경에서의 글입니다. 버전이나 OS의 종류에 따라 내용이 적용되지 않을 수도 있습니다.

docker를 처음 설치하고 보면 이미지나 컨터이너등 모든 정보가 쌓이는 공간이 /var/lib/docker 로 동작하는 것을 알 수 있습니다. 보통의 사용자 환경을 보면 root 디렉터리는 빠르고 비싼 SSD를 사용하기 때문에 용량이 충분하지 않은데 별 생각없이 이미지와 컨테이너를 생성하다보면 어느샌가 용량부족으로 어려움을 겪게 될 것으로 생각됩니다. 그렇기 때문에 처음 docker를 설치해줬을때부터 이런 데이터가 적재되는 곳을 충분히 여유있는 HDD로 잡아주는게 좋은데요. 이번글에서는 그 방법에 대해서 소개합니다.

우선 데이터 경로가 어디로 잡혀있는지 아래 명령어를 통해 확인해줍니다.

$ docker info | grep Root
Docker Root Dir:  /var/lib/docker

위와 같이 /var/lib/docker로 설정되어 있는것이 확인됩니다. 이제부터 저 경로를 변경해볼텐데, 그러기에 앞서 docker 데몬이 돌고 있는 것을 확인해줍니다.

$ ps aux | grep dockerd
root     22030  3.5  0.4 1281684 71876 ?       Ssl  11:37   0:44 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

우리가 하고자하는 것은 간단합니다. dockerd 데몬이 실행될 때 데이터 디렉터리를 지정해주는 것이죠. dockerd 에 --help로 어떤 옵션을 사용해서 그것이 가능한지 살펴봅시다.

$ dockerd --help
...
  --data-root string                        Root directory of persistent Docker state (default "/var/lib/docker")
...

어렵지 않게 --data-root 라는 옵션으로 데이터 경로를 변경해줄 수 있다는 사실이 확인되었으며, 기본경로는 /var/lib/docker라는 사실도 알게 되었습니다. 이제 service 명령을 통해 dockerd가 실행될 때의 옵션을 변경해주면 되는데 docker.servce의 경로를 아래와 같이 확인해줍니다.

$ sudo service docker status
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since 월 2019-05-27 11:37:20 KST; 13min ago
     Docs: https://docs.docker.com
 Main PID: 22030 (dockerd)
    Tasks: 28
   Memory: 71.2M
      CPU: 48.170s
   CGroup: /system.slice/docker.service
           └─22030 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

 5월 27 11:37:18 caley-ubuntu dockerd[22030]: time="2019-05-27T11:37:18.462700174+09:00" level=warning msg="Your kernel does not su
 5월 27 11:37:18 caley-ubuntu dockerd[22030]: time="2019-05-27T11:37:18.463995174+09:00" level=info msg="Loading containers: start.
 5월 27 11:37:19 caley-ubuntu dockerd[22030]: time="2019-05-27T11:37:19.355434840+09:00" level=info msg="Default bridge (docker0) i
 5월 27 11:37:19 caley-ubuntu dockerd[22030]: time="2019-05-27T11:37:19.810312063+09:00" level=info msg="Loading containers: done."
 5월 27 11:37:20 caley-ubuntu dockerd[22030]: time="2019-05-27T11:37:20.169455577+09:00" level=info msg="Docker daemon" commit=481b
 5월 27 11:37:20 caley-ubuntu dockerd[22030]: time="2019-05-27T11:37:20.169710403+09:00" level=info msg="Daemon has completed initi
 5월 27 11:37:20 caley-ubuntu dockerd[22030]: time="2019-05-27T11:37:20.756993426+09:00" level=info msg="API listen on /var/run/doc
 5월 27 11:37:20 caley-ubuntu systemd[1]: Started Docker Application Container Engine.
 5월 27 11:38:42 caley-ubuntu dockerd[22030]: time="2019-05-27T11:38:42.241954906+09:00" level=info msg="No non-localhost DNS names
 5월 27 11:38:42 caley-ubuntu dockerd[22030]: time="2019-05-27T11:38:42.242026462+09:00" level=info msg="IPv6 enabled; Adding defau

위의 내용에서 살펴보면 /lib/systemd/system/docker.service 를 통해서 서비스가 실행되는 것을 알 수 있습니다. vim등의 편집툴을 이용해서 파일을 열고 아래 부분을 찾아봅시다.

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

이제 뒤쪽으로 --data-root 옵션을 추가해주도록 합니다. 아래 예제의 경우에는 데이터 경로를 /data/ 로 지정한 상태입니다.

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root=/data/

편집이 끝났으면 dockerd 를 재시작해주도록 합니다.

sudo service docker stop
sudo service docker start

재시작되었으면 이제 데이터 경로가 변경된 것이 확인됩니다.

$ docker info | grep Root
Docker Root Dir: /data

 

혹시 위와 같이 진행했지만 원하는 결과를 얻지 못한 경우에는 댓글 남겨주세요. 도움 드릴 수 있는 부분이 있다면 함께 고민해보도록 합시다. :-) 

댓글
댓글쓰기 폼