Publishing a Docker image to Bintray
Normally I’m a Java guy. So normally you expect a article about Kotlin, gradle or Maven or something. But the fact that all big CI providers backend on Docker lead to the fact that I have to investigate a little bit time into learning Docker.
Let’s start by showing you how to publish a Docker image to Bintray.
1. Create a Docker Repository
First of all, beside of having a Bintray account of course, you have to create a Docker repository on Bintray. Just go to your overview page, click on “Add new Repository”, choose Docker as type, name it somehow (e.g dockerhub) and click create.
For a successful
docker push you have to set up your credentials in a file located at
~/.dockercfg . According to the docs from Bintray you can receive that file via a simple
curl command. Unfortunately it wasn’t working for me. I just got the message:
“message” : ”Repository ‘/<BintrayUsername>/<BintrayRepoName>’ does not support Docker API version v1"
That’s the reason why I suggest you to create the file manually.
To file needs the following syntax:
I think the file explained everything what do you have to replace 🙃.
3.1 Publishing — The Docker image
Obviously to publishing a Docker image you need a Docker image first. For testing purpose I’ve created a simple
Dockerfile like this:
To create the image just run the following command. The
<ImageName> can be replaced with any name you like (e.g.
docker build -t <ImageName> .
3.2 Publishing — Tagging
Before you can finally publish the image you have to tag it. Bintray needs a special tag name for it. It’s build in the following way:
<Bintray username>-docker-<Bintray RepoName>.bintray.io/<ImageName>
To take the image you have to first find the image via
docker images . This will give you a great overview about all the Docker images on your machine. Find the image you have just created and copy the
IMAGE ID .
To tag these image run:
docker tag <ImageId> <TagNameFromAbove👆>
Note: This tag is also your “final” image name. If someone wants to use your image in their
Dockerfilethey have to use these tag as image name.
3.3 Publishing — Publish 🎉
Now you are finally ready to publish your image. And — it is really simple. Just run
docker push <TagNameFromAbove👆>
To verify that everything works correctly you can create a new test project.
For that I created a new
Dockerfile with the following content:
FROM <DockerTag>CMD echo “Hello World”
<DockerTag> is the full name of the tag we have created above 👆.
To make sure that Docker will download the image from Bintray and don’t use a local copy of it remove the images from your machine:
docker rmi <ImageId> -f
Now you can build and run your test
docker build -t medium-test .
docker run medium-test
Now you have — hopefully — the
Hello World output we expected 🎉.