Dokku 是一个微型的 Heroku,由 Docker 使用不多于 100 行的 Bash 编写。一旦安装完成,你就可以通过 Git 推送兼容 Heroku 的应用到平台上运行。该系统将使用 Heroku buildpacks 构建并在一个独立容器里运行,最终结果就相当于是一个单机版的 Heroku。
Dokku 不足 100 行的代码中包括如下几个组件:
Docker 是一个 Linux 下的容器运行环境,这是一个高级容器,提供 Heroku Dynos 类似技术,这也是 Dokku 的核心
Buildstep 使用 Heroku 的开源工具 buildpacks ,其职责是构建应用所需的基础映像,借助于 Heroku 的 stack 概念
Gitreceive 是一个项目,为你提供一个 git 用户并可推送应用到资料库,然后触发脚本来处理该推送动作。
还有一些其他的项目用来支持 Dokku 和扩展其功能,每个项目都是独立有用的。
发布应用的过程:
$ cd node-js-sample $ git remote add progrium git@progriumapp.com:node-js-app $ git push progrium master Counting objects: 296, done. Delta compression using up to 4 threads. Compressing objects: 100% (254/254), done. Writing objects: 100% (296/296), 193.59 KiB, done. Total 296 (delta 25), reused 276 (delta 13) remote: -----> Building node-js-app ... remote: Node.js app detected remote: -----> Resolving engine versions ... blah blah blah ... remote: -----> Application deployed: remote: http://node-js-app.progriumapp.com
目前提供的插件:
Datastores:
MariaDB : https://github.com/Kloadut/dokku-md-plugin
MongoDB (single container): https://github.com/jeffutter/dokku-mongodb-plugin
PostgreSQL : https://github.com/Kloadut/dokku-pg-plugin
PostgreSQL (single container): https://github.com/jeffutter/dokku-postgresql-plugin
Redis: https://github.com/luxifer/dokku-redis-plugin
RiakCS (single container): https://github.com/jeffutter/dokku-riakcs-plugin
Process Managers:
Circus: https://github.com/apmorton/dokku-circus
Shoreman : https://github.com/statianzo/dokku-shoreman
Supervisord: https://github.com/statianzo/dokku-supervisord
Other:
Node: https://github.com/pnegahdar/dokku-node
user-env-compile (similar to the heroku labs feature) https://github.com/musicglue/dokku-user-env-compile
Chef cookbooks: https://github.com/fgrehm/chef-dokku