Getting Started with HashiCorp Waypoint: How to deploy a python app using flask & Docker

Michael Loewenstein
3 min readOct 20, 2020
The new delivery standard ?

Waypoint is a new software delivery tool made by HashiCorp, released last week. It’s a new abstraction layer over the build-deploy-release pipeline which provides an ‘infrastructure as code’ like approach to the entire delivery flow.

In this post we’ll cover a couple of introductory operations:

  • Build & deploy a Docker image containing a python flask application
  • Push the docker image into a Docker registry
A Waypoint project configuration file

Build a docker image containing a flask application

Install Waypoint CLI for Mac OS X (for others see here):

brew tap hashicorp/tapbrew install hashicorp/tap/waypoint

Assuming you already have Docker for desktop, install a Docker image of Waypoint’s server:

docker pull hashicorp/waypoint:latest

Using the downloaded CLI, start a Waypoint server over a Docker container:

waypoint install -platform=docker -accept-tos

Using git, clone the example flask project (inspired by Waypoint’s python project) containing a flask application, a Docker image and a Waypoint configuration file:

git clone https://github.com/michaelloewenstein/waypoint.git

Initialise and run the flask application using Waypoint CLI:

waypoint init
waypoint up
Build, deploy & release — and the application is deployed !

The application is now running, deployed over our local Docker environment!

Our Flask app running in our local Docker environment

Push the docker image into a Docker registry

Let’s customize the delivery flow and add an update into our Docker repository; we’ll use a Docker Hub repository. Notice we’ve added a new registry component as part of our .hcl configuration:

project = "example-python"

app "example-python" {
labels = {
"service" = "example-python",
"env" = "dev"
}

build {
use "docker" {}
registry {
use "docker" {
image = "michaelloewensteinandco/waypoint"
tag = "latest"
}
}
}

deploy {
use "docker" {
service_port = 8080
}
}
}

Make sure you are logged in into Docker hub (docker login) as Waypoint doesn’t support authentication as part of it’s workflow.

Now let’s re-run Waypoint and see the addition:

The Docker image has been pushed into our Docker Hub repository

The application is not only deployed but also pushed our latest Docker image into the repository.

What’s next ?

There are many other features that Waypoint provides and I encourage you to check out the docs. Overall it’s an interesting new tool and mostly a new approach for abstracting software delivery.

What do you think? let me know what you think on this new approach; comment here or send me a message!

--

--

Michael Loewenstein

👨🏻‍💻 Engineering Leader ⛰️ Software Developer ☁️ Cloud Solution Architect