注:本文翻译自Deis官方文档,无任何商业目的,转载请注明出处。
Deis 支持通过 Dockerfiles 部署应用程序。一个 Dockerfile 能自动化制作一个 Docker 镜像的步骤。Dockerfiles 是难以置信的强大,但是要求一些额外的工作来定义你需要的应用程序运行环境。
预先准备应用程序
如果你没有一个已经存在的应用程序,你可以 clone 一个示例应用程序来证明 Dockerfile 工作流。
$ git clone https://github.com/deis/helloworld.git $ cd helloworld
Dockerfile 要求
为了部署 Dockerfile 应用程序,它们必须是的以下的需求一致:
- Dockerfile 必须暴露(EXPOSE)仅仅一个端口
- 暴露的端口必须是一个 HTTP 服务,可以连接到一个 HTTP router
- 必须为正在运行的容器规定一个默认的 CMD
注意
Dockerfiles 暴露超过一个端口将在 issue 1156 讨论(hit)。创建一个应用程序
使用
deis create
在 Controller 创建一个应用程序。
$ deis create Creating application... done, created folksy-offshoot
Git remote deis added使用 push 部署
使用
git push deis master
部署你的应用程序。$ git push deis master Counting objects: 13, done. Delta compression using up to 8 threads. Compressing objects: 100% (13/13), done. Writing objects: 100% (13/13), 1.99 KiB | 0 bytes/s, done. Total 13 (delta 2), reused 0 (delta 0) -----> Building Docker image Uploading context 4.096 kB Uploading context Step 0 : FROM deis/base:latest ---> 60024338bc63 Step 1 : MAINTAINER OpDemand <info@opdemand.com> ---> Using cache ---> 2af5ad7f28d6 Step 2 : RUN wget -O /tmp/go1.2.1.linux-amd64.tar.gz -q https://go.googlecode.com/files/go1.2.1.linux-amd64.tar.gz ---> Using cache ---> cf9ef8c5caa7 Step 3 : RUN tar -C /usr/local -xzf /tmp/go1.2.1.linux-amd64.tar.gz ---> Using cache ---> 515b1faf3bd8 Step 4 : RUN mkdir -p /go ---> Using cache ---> ebf4927a00e9 Step 5 : ENV GOPATH /go ---> Using cache ---> c6a276eded37 Step 6 : ENV PATH /usr/local/go/bin:/go/bin:$PATH ---> Using cache ---> 2ba6f6c9f108 Step 7 : ADD . /go/src/github.com/deis/helloworld ---> 94ab7f4b977b Removing intermediate container 171b7d9fdb34 Step 8 : RUN cd /go/src/github.com/deis/helloworld && go install -v . ---> Running in 0c8fbb2d2812 github.com/deis/helloworld ---> 13b5af931393 Removing intermediate container 0c8fbb2d2812 Step 9 : ENV PORT 80 ---> Running in 9b07da36a272 ---> 2dce83167874 Removing intermediate container 9b07da36a272 Step 10 : CMD ["/go/bin/helloworld"] ---> Running in f7b215199940 ---> b1e55ce5195a Removing intermediate container f7b215199940 Step 11 : EXPOSE 80 ---> Running in 7eb8ec45dcb0 ---> ea1a8cc93ca3 Removing intermediate container 7eb8ec45dcb0 Successfully built ea1a8cc93ca3 -----> Pushing image to private registry Launching... done, v2 -----> folksy-offshoot deployed to Deis http://folksy-offshoot.local.deisapp.com To learn more, use `deis help` or visit http://deis.io To ssh://git@local.deisapp.com:2222/folksy-offshoot.git * [new branch] master -> master $ curl -s http://folksy-offshoot.local.deisapp.com Welcome to Deis! See the documentation at http://docs.deis.io/ for more information.因为一个 Dockerfile 应用程序被检测到,在第一次部署的时,
cmd
进程类型被自动扩展成 1。定义进程类型
Docker 容器有默认的命令,通常由 CMD 指令规定。Deis 使用
cmd
进程类型引用这个默认命令。
Deis 也支持扩展其他的进程类型(process types)定义在一个 Procfile。为了使用这个功能,你必须:
1. 使用你的 repository root 目录的 Procfile 定义进程类型(process types)
2. 包含一个 start 可执行程序,可以使用start <process-type>
调用