Upload
shugo-numano
View
310
Download
2
Embed Size (px)
Citation preview
Dokku-altで heroku(風)を作る
2015/1/1 @shugonumano
Dockerとは?• 最近流行りのコンテナhttps://www.docker.com/
• 2014年6月にver1.0.0
• 周辺も盛り上がっているコンテナ管理(Kubernetes)、ネットワーク(weave)、OS(CoreOS) など
Dokkuとは?
• dotcloud知ってますか?
• docker使って、PaaSできるの?
• 「mini-Heroku」が作れるhttps://github.com/progrium/dokku
Dokku-altとは?• DokkuパワーアップしたDokku Alternative https://github.com/dokku-alt/dokku-alt
• 今回はこれで、Heroku(風)環境を構築します。
• 最終的に、Railsのscaffoldで作成したRails+PostgreSQLのwebアプリをDokku-alt上のコンテナに実装します。
Dokku-alt構成
Mac
VirtualBox
Ubuntu
Docker Dokku-alt
コンテナ コンテナ コンテナ
Dokku-alt手順
• 下記を参照に簡単に構築できた。http://knowledge.sakura.ad.jp/tech/2545/http://kray.jp/blog/dokku-alternative/https://github.com/dokku-alt/dokku-alt
終わり
やっぱり、 もう少し続けます
Dokku-altで heroku(風)を
Docker in Dockerで作って Rails+Postgresqlアプリを構築する
Dokku-alt Docker in Docker構成
• Docker in Dockerhttp://kray.jp/blog/docker-in-docker-per-project-or-permission/
• 要は、Dokku-alt環境も、Dockerコンテナで構築したい。
構成
Mac
VirtualBoxUbuntu
Docker
コンテナコンテナ
コンテナ
Dockerdokku-alt
コンテナ
172.17.0.x/16
testproject.my-domain.com 192.168.33.10/24
192.168.33.1/24
172.17.42.1/16
192.168.33.10
172.17.0.x
testproject
testproject.my-domain.com
hosts
iptables nat
dokku-alt
①
②③
④
⑤⑦
⑥
手順①• VirtualBoxに、vagrantを使ってubuntuをinstall$ vagrant init ubuntu/trusty64$ vi Vagrantfile config.vm.network "private_network", ip: “192.168.33.10” config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--memory", “2048"] # defalt:512Mだとエラーになったため
end$ vagrant up $ vagrant ssh
手順②• ubuntuにdockerをinstall$ sudo apt-get update$ sudo apt-get install docker.io$ source /etc/bash_completion.d/docker.io
• https://docs.docker.com/installation/ubuntulinux/
手順③• virtual box内のubuntuで、dokku-altの存在するコンテナをprivileged modeでinstall$ docker run --volume=/home/dokku --volume=/var/lib/docker --name=dokku-alt-data busybox:latest$docker run -d --name=dokku-alt --hostname=my-domain.com --volumes-from=dokku-alt-data --publish=10022:22 --publish=80:80 --publish=443:443 --privileged ayufan/dokku-alt:latest
• IPとPWを確認 $ docker logs dokku-altdokku.1 | SSH Login:dokku.1 | user: rootdokku.1 | password: lfMUjxYEvqpRRLY6 # 環境によって異なります dokku.1 | ip: 10.0.42.1 172.17.0.x # 環境によって異なります dokku.1 | Starting dokku daemon...
• コンテナにssh接続$ ssh [email protected]
• コンテナ上のdokku-altに公開鍵を登録$ cat .ssh/id_rsa.pub |ssh [email protected] dokku access:add
手順④• ubuntuのiptablesのforwardにて、ubuntu向けの通信をdokku-altが動いているdockerコンテナにforwardする。$ sudo iptables -t nat -A PREROUTING -m tcp -p tcp --dst 192.168.33.10 --dport 80 -j DNAT --to-destination 172.17.0.x:8 $ sudo iptables -t nat -A PREROUTING -m tcp -p tcp --dst 192.168.33.10 --dport 22222 -j DNAT --to-destination 172.17.0.x:22$ sudo iptables -L -vt nat
• 参考http://mo.kerosoft.com/0203 http://blog.rutti.net/item_747.html#.VJmeSAgMAhttp://ubuntuforums.org/showthread.php?t=1111454
手順⑤• dokku-alt上で、app(testproject)を作成し、curl_time値を120秒に設定(git push時のtimeoutエラー回避) root@my-domain:~# dokku create testprojectroot@my-domain:~# dokku config:set testproject CURL_TIMEOUT=120
• DB(postgresql)を作成し、appと関連付けroot@my-domain:~# dokku postgresql:create sample-dbroot@my-domain:~# dokku postgresql:link testproject sample-db
手順⑥• Railsアプリを作成$ rails new testproject -d postgresql$ cd testproject $ vi Gemfile # rails_12factor,unicornを追加。これがないと、dokku-alt上でrails+postgresqlが起動しない gem 'rails_12factor', group: :production gem 'unicorn'$ bundle install ̶path vendor/bundle$ rails g scaffold post name:string title:string content:text$ vi config/routes.rb root ‘posts#index’ $ rake assets:precompile
• 下記を参考に、Procfile,config/unicorn.rbを追加。全く同じでok https://github.com/heroku/ruby-rails-sample
手順⑥続き• local PCでhosts編集$ sudo vi /etc/hosts 192.168.33.10 my-domain.com testproject.my-domain.com
• local PCで~/.ssh/configにgit push用設定を追加$ sudo vi ~/.ssh/config Host my-domain.com Port 22222
• local PCでgit push実施$ git init$ git add .$ git commit -m 'init'$ git remote add dokku [email protected]:testproject$ git remote -v$ git push dokku master
手順⑦
• dokku-altからコンテナに対して、rake db:migrateを実施root@my-domain:~# dokku run testproject rake db:migrate
動作確認
• local PCのブラウザで下記をopenhttp://testproject.my-domain.com
• railsアプリが表示されればok
まとめ• heroku(風)にRails+postgresqlのアプリをdokku-alt上に構築できた。
• ⑤⑦はdokku-alt(PaaS)側の手順のなので、ここは省略したい。=>ssh -t [email protected] <cmd>で対応できそう。http://progrium.viewdocs.io/dokku/remote-commands
• default以外のruntime、DB、その他機能追加は可能か?
• 他のPaaS OSS環境(CloudFoundry,OpenShift)だと手順はどうだろう。
参考https://github.com/dokku-alt/dokku-alt
https://dokku-alt.github.io/how-it-works.html
https://docs.docker.com/installation/ubuntulinux/
https://docs.docker.com/reference/commandline/cli/
http://qiita.com/algas/items/b9a3e7347b5945697587
http://stackoverflow.com/questions/24586573/docker-error-client-and-server-dont-have-same-version
https://stnly.com/dokku/
http://dev.classmethod.jp/tool/docker/getting-started-docker-on-osx/
http://kray.jp/blog/docker-in-docker-per-project-or-permission/
http://kray.jp/blog/dokku-alternative/
http://knowledge.sakura.ad.jp/tech/2545/
http://blog.bma.rocks/2014/10/23/easy-application-deployments-with-dokku/
http://deeeet.com/writing/2014/05/11/docker-host-networking/
http://deeeet.com/writing/2014/12/01/docker-link-pattern/
https://gist.github.com/linjunpop/6247236
https://github.com/romaninsh/dokku-alt-manager
http://progrium.viewdocs.io/dokku/installation