IDCFクラウドでDebian Jessieの仮想マシン上にDockerを動かしています。Dockerを使っているとすぐにディスク容量を消費します。IDCFクラウドの仮想マシンはデフォルトで15GBしかありません。Ubuntuの時の手順とほぼ同じですが、大きめのディスクを追加してDockerのディレクトリを移動しようと思います。
$ cat /etc/debian_version
8.2
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
現在のファイルシステムとディスクの状態です。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 15G 12G 2.7G 81% /
udev 10M 0 10M 0% /dev
tmpfs 1.6G 110M 1.5G 7% /run
tmpfs 4.0G 740K 4.0G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 4.0G 0 4.0G 0% /sys/fs/cgroup
管理画面から「ボリューム」をアタッチする
IDCFクラウドの管理画面の左メニューから「ボリューム」を選択して「ボリューム作成」ボタンをクリックします。IDCFクラウドではディスクを「ボリューム」と呼びます。
ボリューム作成の画面で「ボリューム名」と「サイズ」、「ゾーン」を入力して「作成する」ボタンをクリックします。
ボリュームの一覧から作成したボリューム名をクリックします。ボリューム詳細画面の「アタッチ」メニューから仮想マシンを選択して「アタッチする」ボタンをクリックします。
ボリュームのアタッチが完了したらOSをrebootします。
$ sudo reboot
Debianにパーティションを作成
仮想マシンがrebootしたら、IDCFクラウドの管理画面でアタッチした「ボリューム」がディスクとして追加されたことを確認します。
$ sudo fdisk -l
Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
パーティションの作成
fdiskコマンドで/dev/sdb
にパーティションを作成します。デフォルトの設定で作成する場合はn、p、Enterキー3回、 w
と入力します。
$ sudo fdisk /dev/sdb
新しいパーティションが/dev/sdb1
に作成されました。
$ sudo fdisk -l
...
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 209715199 209713152 100G 83 Linux
ファイルシステムの作成
既存ファイルシステムの確認すると/dev/sda1
はext4です。
$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda1 ext4 15348720 11734892 2811116 81% /
udev devtmpfs 10240 0 10240 0% /dev
tmpfs tmpfs 1638236 8672 1629564 1% /run
tmpfs tmpfs 4095588 0 4095588 0% /dev/shm
tmpfs tmpfs 5120 0 5120 0% /run/lock
tmpfs tmpfs 4095588 0 4095588 0% /sys/fs/cgroup
追加したディスクのパーティションにも同じext4でファイルシステムを作成します。
$ sudo mkfs.ext4 /dev/sdb1
パーティションのマウント
パーティションをマウントするディレクトリを/media
の下に作成します。
$ sudo mkdir /media/data
/dev/sdb1
パーティションのUUIDをblkid
コマンドで確認します。
$ sudo blkid /dev/sdb1
/dev/sdb1: UUID="af1e6cc8-6184-4642-9a0d-5ac917e1d9d3" TYPE="ext4" PARTUUID="07a7e924-01"
確認したUUIDを/etc/fstab
に追加しますが、編集前にバックアップをします。
$ sudo cp -ip /etc/fstab{,.`date +%Y%m%d`}
/etc/fstab
に/media/data
へ/dev/sdb1
パーティションをマウントする設定を追加します。
$ sudo vi /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=18de9747-f69a-4f98-a80a-3d4b77145eaa / ext4 errors=remount-ro 0 1
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
UUID=af1e6cc8-6184-4642-9a0d-5ac917e1d9d3 /media/data ext4 defaults 0 2
追加した行の4列目以降は以下のように設定しました。
- : defaults
- : 0: dumpする
- : 2: fsckする
/etc/fstab
を再マウントします。/dev/sdb1
パーティションが正常にマウントしました。
$ sudo mount -a
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 15G 12G 2.7G 81% /
udev 10M 0 10M 0% /dev
tmpfs 1.6G 8.5M 1.6G 1% /run
tmpfs 4.0G 0 4.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 4.0G 0 4.0G 0% /sys/fs/cgroup
/dev/sdb1 99G 60M 94G 1% /media/data
Dockerのディレクトリ移動
新しく追加したパーティションのファイルシステムにDockerのディレクトリを移動していきます。まずDockerサービスを停止します。
$ sudo systemctl stop docker
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled)
Active: inactive (dead) since 木 2015-12-31 06:29:44 JST; 14s ago
Docs: https://docs.docker.com
Process: 521 ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS (code=exited, status=0/SUCCESS)
Main PID: 521 (code=exited, status=0/SUCCESS)
rsync
でファイルシステムのパーミッションを保持したまま、/media/data/docker
ディレクトリにコピーします。
$ sudo mkdir /media/data/docker
$ sudo rsync -aXS /var/lib/docker/. /media/data/docker/
コピー元のディレクトリとコピー先のディレクトリのサイズを比較して一致しているか確認します。
$ sudo du -sch /var/lib/docker/*
9.6G /var/lib/docker/aufs
6.8M /var/lib/docker/containers
11M /var/lib/docker/graph
8.0K /var/lib/docker/linkgraph.db
72K /var/lib/docker/network
4.0K /var/lib/docker/repositories-aufs
4.0K /var/lib/docker/tmp
4.0K /var/lib/docker/trust
447M /var/lib/docker/volumes
11G total
$ sudo du -sch /media/data/docker/*
9.9G /media/data/docker/aufs
6.8M /media/data/docker/containers
11M /media/data/docker/graph
8.0K /media/data/docker/linkgraph.db
68K /media/data/docker/network
4.0K /media/data/docker/repositories-aufs
4.0K /media/data/docker/tmp
4.0K /media/data/docker/trust
443M /media/data/docker/volumes
11G total
オリジナルの/var/lib/docker
はバックアップして、ディレクトリを作り直します。
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo mkdir /var/lib/docker
/media/data/docker
ディレクトリを/var/lib/docker
にマウントします。ディレクトリのサイズも同じです。
$ sudo mount -o bind /media/data/docker /var/lib/docker
$ sudo du -sch /var/lib/docker/*
9.9G /var/lib/docker/aufs
6.8M /var/lib/docker/containers
11M /var/lib/docker/graph
8.0K /var/lib/docker/linkgraph.db
68K /var/lib/docker/network
4.0K /var/lib/docker/repositories-aufs
4.0K /var/lib/docker/tmp
4.0K /var/lib/docker/trust
443M /var/lib/docker/volumes
11G total
dfでディレクトリのマウントを確認します。
$ df -ha
Filesystem Size Used Avail Use% Mounted on
...
/dev/sdb1 99G 11G 83G 12% /media/data
/dev/sdb1 99G 11G 83G 12% /var/lib/docker
/etc/fstab
にOSのreboot後もディレクトリがマウントするように追加して再度マウントします。
$ sudo vi /etc/fstab
/media/data/docker /var/lib/docker none bind 0 0
$ sudo mount -a
Dockerを起動します。
$ sudo systemctl start docker
sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled)
Active: active (running) since 木 2015-12-31 06:44:08 JST; 5s ago
Docs: https://docs.docker.com
Main PID: 1060 (docker)
CGroup: /system.slice/docker.service
└─1060 /usr/bin/docker daemon -H fd:// --cluster-store=consul://lo...
docker ps
でDockerの起動を確認します。停止しているコンテナはstartします。Dockerのディレクトリの移動が終了したのでバックアップを削除しておきます。
$ sudo rm -r /var/lib/docker.bak/