自分は Windows PC ホスト内で VirtualBox で Ubuntu 系 Linux Mint を起動しているのですが、docker のコンテナやボリュームデータをまるごとオンメモリで高速に動作させたいと思い、RAMディスクを設定して載せるようにしました。RAM ディスクだと OS をシャットダウンすると消えてしまいますが、Docker の場合、古いコンテナのデータがどんどん溜まっていくために掃除できて開発上好都合でもあります。

RAMディスクの設定

まずパス /ramdisk をマウントポイントとして RAM ディスクを設定することにします。

マウントポイントの作成

ディレクトリを作成して、スティッキービットを付けて誰でも書き込み可能にします。

$ sudo mkdir /ramdisk
$ sudo chmod 1777 /ramdisk

/etc/fstab の設定

/etc/fstab に下記を追記します。

tmpfs  /ramdisk  tmpfs  defaults  0  0

一旦、OSを再起動します。(fstab に設定しなくても一時的には mount コマンドで対応することも可能)

Docker のコンテナとボリュームを置き場を設定

以下の設定中は Docker を停止しておきます。

/ramdisk にディレクトリを作る

$ sudo mkdir -p /ramdisk/docker/containers
$ sudo mkdir -p /ramdisk/docker/volumes

シンボリックを張る

/var/lib/dockercontainers, volumes/ramdisk/docker を見るようにします。

$ sudo -i
# cd /var/lib/docker
# mv containers containers.old
# mv volumes volumes.old
# ln -s /ramdisk/docker/containers
# ln -s /ramdisk/docker/volumes

動作確認

Docker を起動して、適当なコンテナを走らせて、 /ramdisk/docker 内にファイルが作られることを確認します。

/ramdisk/docker の作成を自動化

/ramdisk/docker 内のディレクトリ構成を OS 起動時に作成するように設定します。

/etc/rc.local の設定

/etc/rc.local として下記を追記するか、コマンドを追記します。作成した場合は chmod +x /etc/rc.local で実行権限を付与しておきます。

1
2
3
4
5
6
#!/bin/sh -e
#
# rc.local
#
mkdir -p /ramdisk/docker/containers
mkdir -p /ramdisk/docker/volumes

最終確認

OS を再起動します。下記のそれぞれのコマンドが想定どおりの結果になっていれば OK です。

$ ls -lR /ramdisk
/ramdisk:
drwxrwxrwt 3 root root 60 Sep  8 10:20 .
drwxr-xr-x 4 root root 80 Sep  8 10:20 docker

/ramdisk/docker:
drwxr-xr-x 2 root root 40 Sep  8 10:20 containers
drwxr-xr-x 2 root root 60 Sep  8 10:20 volumes
$ ls -l /var/lib/docker
lrwxrwxrwx   1 root root 26 Aug  7 10:05 containers -> /ramdisk/docker/containers
lrwxrwxrwx   1 root root 23 Aug  7 10:13 volumes -> /ramdisk/docker/volumes
$ sudo docker ps
CONTAINER ID   IMAGE   COMMAND   CREATED   STATUS   PORTS   NAMES

これでローカル開発において、docker 上の依存サービスを高速に動作させることができるようになりました。なお自分の環境では VirtualBox に対してメモリ 8GB 割り当てた Ubuntu 18.04 がベースの Linux Mint 19.2 Tina インスタンスでこれを設定してます。