22
Dokku-altで heroku(風)を作る 2015/1/1 @shugonumano

20150101勉強会 dokku alt

Embed Size (px)

Citation preview

Page 1: 20150101勉強会 dokku alt

Dokku-altで heroku(風)を作る

2015/1/1 @shugonumano

Page 2: 20150101勉強会 dokku alt

Dockerとは?• 最近流行りのコンテナhttps://www.docker.com/

• 2014年6月にver1.0.0

• 周辺も盛り上がっているコンテナ管理(Kubernetes)、ネットワーク(weave)、OS(CoreOS) など

Page 3: 20150101勉強会 dokku alt

Dokkuとは?

• dotcloud知ってますか?

• docker使って、PaaSできるの?

• 「mini-Heroku」が作れるhttps://github.com/progrium/dokku

Page 4: 20150101勉強会 dokku alt

Dokku-altとは?• DokkuパワーアップしたDokku Alternative https://github.com/dokku-alt/dokku-alt

• 今回はこれで、Heroku(風)環境を構築します。

• 最終的に、Railsのscaffoldで作成したRails+PostgreSQLのwebアプリをDokku-alt上のコンテナに実装します。

Page 5: 20150101勉強会 dokku alt

Dokku-alt構成

Mac

VirtualBox

Ubuntu

Docker Dokku-alt

コンテナ コンテナ コンテナ

Page 6: 20150101勉強会 dokku alt

Dokku-alt手順

• 下記を参照に簡単に構築できた。http://knowledge.sakura.ad.jp/tech/2545/http://kray.jp/blog/dokku-alternative/https://github.com/dokku-alt/dokku-alt

Page 7: 20150101勉強会 dokku alt

終わり

Page 8: 20150101勉強会 dokku alt

やっぱり、 もう少し続けます

Page 9: 20150101勉強会 dokku alt

Dokku-altで heroku(風)を

Docker in Dockerで作って Rails+Postgresqlアプリを構築する

Page 10: 20150101勉強会 dokku alt

Dokku-alt Docker in Docker構成

• Docker in Dockerhttp://kray.jp/blog/docker-in-docker-per-project-or-permission/

• 要は、Dokku-alt環境も、Dockerコンテナで構築したい。

Page 11: 20150101勉強会 dokku alt

構成

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

②③

⑤⑦

Page 12: 20150101勉強会 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

Page 13: 20150101勉強会 dokku alt

手順②• 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/

Page 14: 20150101勉強会 dokku alt

手順③• 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

Page 15: 20150101勉強会 dokku alt

手順④• 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

Page 16: 20150101勉強会 dokku alt

手順⑤• 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

Page 17: 20150101勉強会 dokku alt

手順⑥• 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

Page 18: 20150101勉強会 dokku alt

手順⑥続き• 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

Page 19: 20150101勉強会 dokku alt

手順⑦

• dokku-altからコンテナに対して、rake db:migrateを実施root@my-domain:~# dokku run testproject rake db:migrate

Page 20: 20150101勉強会 dokku alt

動作確認

• local PCのブラウザで下記をopenhttp://testproject.my-domain.com

• railsアプリが表示されればok

Page 21: 20150101勉強会 dokku alt

まとめ• 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)だと手順はどうだろう。

Page 22: 20150101勉強会 dokku alt

参考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