Docker Sharing
dockerインストールしてみた、docker触ってみたい、dockerでnginx立ててみた、 dockerでwordpressやってみた、とかとか。結局、日常開発でどう使えばいいんだっけ?の質問の答えに なってない。
開発環境がLinux、Ubuntuでvim派だと docker run 時に -v オプション付けてhostとcontainerの リソースを共有できるが、開発環境がMacだと間にVMが挟んでるのでややこしくなる。
Vagrant使ったことある方は、vm.synced_folder 一発で解決できるんじゃないと思うかも知りませんが、 boot2dockerではカスタムvagrant boxを使わないとできないみたい。
boot2dockerが推奨してるのは、sambaサーバー経由でフォルダ共有ということなので、設定してみた。
$ docker run -v /var/app/ --name app busybox
$ docker run --name app-samba --rm -v /usr/local/bin/docker:/docker -v /var/run/docker.sock:/docker.sock svendowideit/samba app
ここまでやると、finderから cifs://192.168.59.103, smb://192.168.59.103 にアクセスして、Guestユーザーで/var/appに入れる。
docker-nginx, docker-nodeで、ソースフォルダを /var/app/nginx/html, /var/app/nodejs にした理由もここにある。
nginx、nodeをsambaサーバーのVolumesを使って起動する
### nodeの例:
$ docker run -p 3000:3000 --volumes-from samba-server -i -t dongri/node bash
bash-4.1# cd /var/app/nodejs/
bash-4.1# npm install
bash-4.1# nodemon index.js
17 Jun 08:12:18 - [nodemon] v1.2.0
17 Jun 08:12:18 - [nodemon] to restart at any time, enter `rs`
17 Jun 08:12:18 - [nodemon] watching: *.*
17 Jun 08:12:18 - [nodemon] starting `node index.js`
Express server listening on port 3000
### nginxの例:
$ docker run -p 80:80 --volumes-from samba-server -i -t dongri/nginx
ここまでやったら、macから/var/appにソースを入れて好きなように開発できる。
課題
ソースはgitで管理してるので、いちいちsambaにコピーするのが面倒。。。
どなたかよい解決方法あればお願いします!
追記(2014.06.18)
@yungsang がvagrant書いてくれたので、そちらも
Re: Dongri’s Blog - docker-sharing
$ vim Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define "boot2docker"
config.vm.box = "yungsang/boot2docker"
config.vm.network :forwarded_port, guest: 2375, host: 4243, disabled: true
config.vm.network :private_network, ip: "192.168.33.10"
config.vm.synced_folder ".", "/var/app", type: "nfs"
# Fix busybox/udhcpc issue
config.vm.provision :shell do |s|
s.inline = <<-EOT
if ! grep -qs ^nameserver /etc/resolv.conf; then
sudo /sbin/udhcpc
fi
cat /etc/resolv.conf
EOT
end
# Adjust datetime after suspend and resume
config.vm.provision :shell do |s|
s.inline = <<-EOT
sudo /usr/local/bin/ntpclient -s -h pool.ntp.org
date
EOT
end
config.vm.provision :shell do |s|
s.inline = <<-EOT
docker rm -f nodejs || true
EOT
end
config.vm.provision :docker do |d|
d.build_image "/var/app/node/", args: "-t dongri/node"
d.run "nodejs", image: "dongri/node", args: "-p 3000:3000"
end
config.vm.network :forwarded_port, guest: 3000, host: 3000
end
$ git clone git@github.com:dongri/Dockerfiles.git
$ cd Dockerfiles
$ edit Vagrantfile
$ vagrant up
$ open http://localhost:3000
ありがとうございます!