インストールと使い方のまとめ
adlogix/docker-machine-nfs: Activates NFS on docker-machineのREADMEの通りにインストールします。
まず、docker-machineが再起動されてもよいように適宜準備します。
次に、OSX上にマウントしたいディレクトリを作成して、以下のように実行します。内部でsudoを使っているのでパスワードプロンプトが表示されたらパスワードを入力してください。
docker-machine-nfs default --shared-folder=マウントしたいディレクトリ
これでdocker-machine上にも同じディレクトリ名のところにマウントされます。docker-machineを再起動してもマウントされるようになっています。
以下は調査メモ
dinghy試してみた
OSXでDockerを超高速化するdinghy - Qiitaを読んで試してみたのですが、個人的にはあまり好きになれませんでした。
- dnghyをインストールするとHomebrewでUNFS3とdnsmasqがインストールされる。
- システムのNFSサーバ使ってくれればいいのに。
- docker-machineコマンドではなくdinghyコマンドを使う必要があってコマンド体系が違う。
- 独自のコマンド覚えたり、それに慣れてしまうのは避けたい。
docker-machine-nfsを発見
私はオールインワン的なツールより単機能のツールのほうが好きなので、NFSマウントだけできるのが欲しいなあと思って nfs share / guest to host · Issue #64 · boot2docker/boot2docker を見ていたら、adlogix/docker-machine-nfs: Activates NFS on docker-machineというのが紹介されていました。
docker-machine-nfsの使い方
インストールはREADMEに書いてあるコマンドを実行すればOKです。インストールと言ってもシェルスクリプトをダウンロードして実行権限をつけるだけです。
マウントの設定は以下のような感じで実行します。実行するとdocker machineが再起動されますので、再起動しても大丈夫なときに実行するようにしてください。
docker-machine-nfs default --shared-folder=/Users/hnakamur/www
Docker Toolboxを使っているとdocker machineの名前は default
なのでそれを docker-machine-nfs
の後に指定しています。
マウントしたいOSX上のディレクトリを --shared-folder
で指定します。ディレクトリは予め作成しておく必要があります。 --shared-folder
を省略すると /Users
が使われます。
docker-machine-nfsの329〜341行目 で /etc/exports
を編集して nfsd
を再起動しています。 sudo
を使用しているのでパスワード入力のプロンプトが表示されたらパスワードを入力してください。
注意: マウントするディレクトリは他と重ならないようにする必要があります
私はVagrantでもNFSを使っていたので、 /etc/exports
に既にエントリがありました。その状態で最初 docker-machine-nfs default
を試したら以下のようなエラーが出ました。
exports:8: /Users conflicts with existing export /Users/hnakamur/ghq/github.com/trafficserver-doc-ja/trafficserver
既に /etc/exports
に書かれていた /Users/hnakamur/ghq/github.com/trafficserver-doc-ja/trafficserver
と /Users
が重なっているのが問題でした。
そこで、重ならないような /Users/hnakamur/www
というディレクトリを作成して docker-machine-nfs default --shared-folder=/Users/hnakamur/www
のようにすると今度は成功しました。
実行後の /etc/exports
を見ると以下のようになっていました。Vagrantで追加されたエントリの後に docker-machine-nfs
で追加されたエントリがあります。
# VAGRANT-BEGIN: 501 682cdb7f-68fb-41ea-9743-be140901401c
"/Users/hnakamur/ghq/github.com/trafficserver-doc-ja/trafficserver" 192.168.100.23 -alldirs -mapall=501:20
# VAGRANT-END: 501 682cdb7f-68fb-41ea-9743-be140901401c
# VAGRANT-BEGIN: 501 68f51887-2015-4f49-9676-7c58a7d5d07e
"/Users/hnakamur/ghq/github.com/hnakamur/trafficserver" 192.168.100.23 -alldirs -mapall=501:20
# VAGRANT-END: 501 68f51887-2015-4f49-9676-7c58a7d5d07e
/Users/hnakamur/www 192.168.99.100 -alldirs -mapall=501:20
docker-machine側に生成された設定を確認
docker-machine ssh
で docker-machine に入って df -h
を実行してみました。
docker@default:~$ df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 1.8G 129.4M 1.6G 7% /
tmpfs 1001.3M 0 1001.3M 0% /dev/shm
/dev/sda1 18.2G 4.0G 13.3G 23% /mnt/sda1
cgroup 1001.3M 0 1001.3M 0% /sys/fs/cgroup
/dev/sda1 18.2G 4.0G 13.3G 23% /mnt/sda1/var/lib/docker/aufs
192.168.99.1:/Users/hnakamur/www
391.2G 156.9G 234.1G 40% /Users/hnakamur/www
OSXの /Users/hnakamur/www
が docker-machine の /Users/hnakamur/www
にマウントされています。
docker-machine-nfs.shの358〜382行目でマウントするためのシェルスクリプト /var/lib/boot2docker/bootlocal.sh
を生成しています。
実際に生成されたスクリプトは以下のようになっていました。
#!/bin/sh
sudo umount /Users
sudo mkdir -p /Users/hnakamur/www
sudo /usr/local/etc/init.d/nfs-client start
sudo mount -t nfs -o noacl,async 192.168.99.1:/Users/hnakamur/www /Users/hnakamur/www
もしdocker-machine側では違うディレクトリにしたい場合はdocker-machine-nfs.shの358〜382行目のあたりとコマンドライン引数を受け取るあたりを改修する必要があります。
とりあえずは改修せずにそのまま使ってみようかなと思いました。
参考: dinghyのファイル変更検知はfsevents_to_vmというrubygemを使っていた
dinghy create --provider virtualbox
を実行した時の出力を見ると、dinghyのファイル変更検知はfsevents_to_vmというrubygemを使っていました。
$ dinghy create --provider virtualbox
Creating the dinghy VM...
Stopping "dinghy"...
Machine "dinghy" was stopped.
Starting NFS daemon, this will require sudo
Password:
Waiting for NFS daemon...
Mounting NFS /Users/hnakamur
Installing fsevents_to_vm, this will require sudo
Fetching: rb-fsevent-0.9.7.gem (100%)
Successfully installed rb-fsevent-0.9.7
Fetching: thor-0.19.1.gem (100%)
Successfully installed thor-0.19.1
Fetching: net-ssh-2.9.4.gem (100%)
Successfully installed net-ssh-2.9.4
Fetching: fsevents_to_vm-1.1.1.gem (100%)
Successfully installed fsevents_to_vm-1.1.1
4 gems installed
Starting the FsEvents daemon
setting up DNS resolution, this will require sudo
Starting the DNS daemon
Starting the HTTP proxy