371 words
2 minutes
Using the Fly Docker registry
Anubhav Gain
2024-05-21

Using the Fly Docker registry#

Fly.io lets you deploy Docker containers that will be compiled as a Firecracker VM and run in locations around the world.

Fly offer a number of ways to build and deploy apps. For many frameworks you can run fly launch and it will detect the framework and configure a container for you. For others you can pass it a Dockerfile which will be built and deployed. But you can also push your own images to a Docker registry and deploy them to Fly.

Today I figured out how to use Fly’s own registry to deploy an app.

Tagging images for the Fly registry#

Fly’s registry is called registry.fly.io. To use it, you need to tag your Docker images with a tag that begins with that string.

Every Fly app gets its own registry subdomain. You can create apps in a number of ways, but the easiest is to use the Fly CLI:

flyctl apps create datasette-demo

Fly app names must be globally unique across all of Fly - you will get an error if the app name is already taken.

You can create an app with a random, freely available name using the --generate-name option:

~ % flyctl apps create --generate-name
? Select Organization: Simon Willison (personal)
New app created: rough-dew-1296

Now that you have an app name, you can tag your Docker image using:

registry.fly.io/your-app-name:unique-tag-for-your-image

If you are building an image using Docker on your machine, you can run this command in the same directory as your Dockerfile:

docker build -t registry.fly.io/datasette-demo:datasette-demo-v0 .

Pushing images to the registry#

In order to push your image to Fly, you will first need to authenticate.

The flyctl auth docker command will do this for you:

~ % flyctl auth docker
Authentication successful. You can now tag and push images to registry.fly.io/{your-app}

This works by hooking into Docker’s own authentication mechanism. You can see what it has done by looking at your ~/.docker/config.json file. Mine looks like this:

{
"auths": {
"registry.fly.io": {
"auth": "... secret token here ..."
}
,
"experimental": "disabled",
"stackOrchestrator": "swarm"
}

Now you can push your image to the registry like this:

docker push registry.fly.io/datasette-demo:datasette-demo-v0

Deploying an image#

Now that your image is pushed, you can deploy an instance of it like this:

flyctl deploy --app datasette-demo \
--image registry.fly.io/datasette-demo:datasette-demo-v0

A few seconds later your app will be running at:

https://name-of-your-app.fly.dev/
Using the Fly Docker registry
https://mranv.pages.dev/posts/using-the-fly-docker-registry/
Author
Anubhav Gain
Published at
2024-05-21
License
CC BY-NC-SA 4.0