티스토리 뷰
(*) 우분투 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
혹시 위와 같이 진행했지만 원하는 결과를 얻지 못한 경우에는 댓글 남겨주세요. 도움 드릴 수 있는 부분이 있다면 함께 고민해보도록 합시다. :-)
'개발 > docker' 카테고리의 다른 글
Docker 컨테이너 안에 jupyter 접속하기 (2) | 2019.06.17 |
---|---|
Jekyll 블로그 docker로 한방에 올리기 (0) | 2019.06.11 |
nvidia-docker Installation in Ubuntu (2) | 2019.05.27 |
nvidia-docker로 개발환경 한방에 세팅하기 (14) | 2019.05.07 |
RuntimeError: DataLoader worker (pid 13881) is killed by signal: Bus error. (10) | 2019.04.15 |
- Total
- Today
- Yesterday