In a previous blog post we went through how to build a Docker container image from a remote (Github) repository.
Here we’re going to expand on that by actually building the image itself remotely, using Docker Build Cloud.
What we can do with Docker Build Cloud is instead of building the image locally and then having to push to a remote container registry (for example the Docker Hub), we can build remotely and then immediately push that image to the registry so that it is available for immediate use by say, our team members or deployment/testing pipelines.
This has advantages as we no longer are reliant on our local system. Build Cloud uses isolated Amazon EC2 instances so we’ll get a consistent build speed and if our images are large (I mainly work with SQL Server images, which are about 1.5GB in size), and we have a poor internet connection, we don’t have to wait for ages to push the image to the registry.
I have a remote repository that we’re going to use to build a SQL Server 2022 container image. Very simple repo, with just a dockerfile in it to build the image.
Now, to build an image from that remote repository locally, we would run: –
docker build -t dbafromthecold/sqlserver2022:latest https://github.com/dbafromthecold/sqlserver2022.git
But how do we use Build Cloud?
First thing to do is create a Docker account and sign up for Build Cloud.
Full directions are here: –
https://docs.docker.com/build/cloud/
N.B. – Docker Personal accounts are free and will give you 50 “build minutes” per month.
Once we have the account signed up we are good to go!
To build an image using the cloud builder we first need to log into Docker on the command line: –
docker login
Then we use the docker buildx build command to use Build Cloud: –
docker buildx build https://github.com/dbafromthecold/sqlserver2022.git ` --builder cloud-dbafromthecold-default ` --tag dbafromthecold/sqlserver2022:latest ` --load
Let’s break down what this is doing…
docker buildx build https://github.com/dbafromthecold/sqlserver2022.git
This is saying to use Build Cloud and pull the dockerfile from that repository on Github
–builder cloud-dbafromthecold-default
Use the default builder that is available in Build Cloud
–tag dbafromthecold/sqlserver2022:latest
Tag the build image with a name
–load
Once the image is built, pull it to the local machine (encrypted)
When executed, we can see the image being built and pulled to the local machine: –
N.B. – I built the image a few times to test before taking this screenshot, hence why there are cached layers in the build.
Once complete, we can check our local images: –
docker image ls
And there it is! But hang on, didn’t I say earlier we don’t want to have the image locally? We want to push it to a remote repository!
To to that, we need a remote repository in a registry. I’ve set up one in the Docker Hub for this example here but any other registry will work (just make sure you’re authenticated).
To use Build Cloud and push to a remote registry: –
docker buildx build https://github.com/dbafromthecold/sqlserver2022.git ` --builder cloud-dbafromthecold-default ` --tag dbafromthecold/sqlserver2022:latest ` --push
Only difference here is that we’re using –push instead of –load. And make sure that the tag used for the image matches the repository that you’re pushing to!
When executed, we’ll see something similar to: –
And if we check the repository in the registry: –
There’s the image! Available for our wider team to use or be utilised in a pipeline!
We can even use something like Github actions to trigger the build when we push to the GitHub repo, pretty cool…huh?
Thanks for reading!