Deploy via Dockerfile

You already have a project wrapped up in a docker container? Great! Just deploy that!

The fly launch command detects your Dockerfile and builds it. If you have Docker running locally, it builds it on your machine. If not, it builds it on a Fly build machine. Once your container is built, it’s deployed! Need some extra config? No sweat, we’ve got you covered. Let’s take a look.

fly launch
...
Detected a Dockerfile app
? Choose an app name (leave blank to generate one):
? Select Organization: Mark Ericksen (personal)
...

? Choose a region for deployment: Los Angeles, California (US) (lax)
App will use 'lax' region as primary

Created app 'wispy-breeze-3322' in organization 'personal'
Admin URL: https://fly.io/apps/wispy-breeze-3322
Hostname: wispy-breeze-3322.fly.dev
? Would you like to set up a Postgresql database now? No
? Would you like to set up an Upstash Redis database now? No
Wrote config file fly.toml
? Would you like to deploy now?

Let fly launch generate an app name for you or pick your own.

Select the Fly.io region to deploy to.

The launch command generates a fly.toml file for your project with the settings. You can deploy right away, or add some config first.

Config First!


Most Dockerfiles expect some configuration settings through ENV. The generated fly.toml file has a place for you to add your custom ENV settings. It’s the [env] block.

[env]
  MY_SPECIAL_ENV = "some_value"
  MAX_PLAYER_COUNT = "15"

Add the values your Dockerfile or container requires.

Sometimes you have secrets that shouldn’t be checked in to git or shared publicly. For those settings, you can set them using fly secrets.

flyctl secrets set MY_SECRET=romance
Secrets are staged for the first deployment

You can list the secrets you’ve already set using fly secrets list

fly secrets list
NAME      DIGEST                           DATE
MY_SECRET b9e37b7b239ee4aefc75352fe3fa6dc6 1m20s ago

The values aren’t displayed since they are secret!

Deploy Your App


If you didn’t previously deploy the app, you can do that now.

fly deploy
Validating /Users/someone/project/fly.toml
Platform: machines
✓ Configuration is valid
==> Building image
Remote builder fly-builder-restless-shadow-3063 ready
==> Creating build context
--> Creating build context done
==> Building image with Docker
--> docker host: 20.10.12 linux x86_64
Sending build context to Docker daemon     346B
...
  Finished deploying

Visit your newly deployed app at https://wispy-breeze-3322.fly.dev/

By default, fly deploy builds the image using a remote builder. If you have Docker running locally and want to build locally, then run fly deploy --local-only. Once your container is built, it’s deployed!

Open Your App


Run fly open to open your deployed app in a browser.

You’re off and running!

Taking it Further


Lots of applications deployed in a container have some state that they want to keep. Here are a couple resources to check out for ways to do that.