Deploying Docker Image applications

Overview

This document is a hands-on guide to deploy a simple Docker Image web application.

Creating the app

To create an app, you need to use the command app-create:

$ tsuru app-create <app-name> <app-platform>

For Docker Images, doesn’t exist a specific platform, but we can use static! Let’s be over creative and develop a hello world tutorial-app, let’s call it “helloworld”:

$ tsuru app-create helloworld static

To list all available platforms, use the command platform-list.

You can see all your applications using the command app-list:

$ tsuru app-list
+-------------+-------------------------+--------------------------------+
| Application | Units State Summary     | Address                        |
+-------------+-------------------------+--------------------------------+
| helloworld  | 0 of 0 units in-service | helloworld.192.168.50.4.nip.io |
+-------------+-------------------------+--------------------------------+

Application code

A simple Dockerfile:

FROM golang
RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN go build .
ENTRYPOINT ./app

A simple web application in Go main.go:

package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    c := make(chan os.Signal, 1)
    signal.Notify(c, os.Interrupt)
    go func(){
        for sig := range c {
            if sig == os.Interrupt || sig == os.Kill {
                os.Exit(1)
            }
        }
    }()
    http.HandleFunc("/", hello)
    fmt.Println("running on "+os.Getenv("PORT"))
    http.ListenAndServe(":"+os.Getenv("PORT"), nil)
}

func hello(res http.ResponseWriter, req *http.Request) {
    fmt.Fprintln(res, "hello, world!")
}

Building the image

docker login registry.myserver.com

docker build -t registry.myserver.com/image-name .

Don’t forget the dot(.) at the end of the command, this indicates where the Dockerfile is placed

Sending the image to registry

docker push registry.myserver.com/image-name

Docker Image deployment

After pushing your image to your Docker image registry, you can do the deploy using the command tsuru app-deploy -i.

tsuru app-deploy -i registry.myserver.com/image-name -a helloworld

Note

This image should be in a registry and be accessible by the nodes. Image should also have a Entrypoint or a Procfile at given paths, / or /app/user/ or /home/application/current

Running the application

Now that the app is deployed, you can access it from your browser, getting the IP or host listed in app-list and opening it. For example, in the list below:

$ tsuru app-list
+-------------+-------------------------+--------------------------------+
| Application | Units State Summary     | Address                        |
+-------------+-------------------------+--------------------------------+
| helloworld  | 1 of 1 units in-service | helloworld.192.168.50.4.nip.io |
+-------------+-------------------------+--------------------------------+

It’s done! Now we have a simple Docker image project deployed on tsuru.

Now we can access your app in the URL displayed in app-list (“helloworld.192.168.50.4.nip.io” in this case).

Going further

For more information, you can dig into tsuru docs, or read complete instructions of use for the tsuru command.