Manually publish images to GitHub Container Registry (GHCR)

This is just a short little post on how to manually publish images to GitHub Container Registry (GHCR). Looking at the documentation, the usual way to go seems to be to use GitHub Actions and automatically build and publish images onto the registry. However, I do have one use case where images aren’t built via GitHub Actions but offline on a machine of mine, yet I still want to make the images available via ghcr.io. It took me longer than it should have to figure out how to manually authenticate to ghcr.io, so here are the steps.

Generate Personal Access Token

At first, you might think that you can authenticate with GHCR just by simply using your GitHub username and password. That is not the case. To authenticate you will need a token, a so-called personal access token (PAT). Head over to GitHub and click on the drop-down of your user on the top right. From there, head into Settings. Then click on Developer settings at the bottom of the left side. Now click on Personal access token and from there Generate new token:

Next, give your token a meaningful name, choose an expiration of your liking and check the write:packages scope, then hit Generate token at the bottom of the page:

Make sure you copy your token, you will not be able to see it again!

Login to ghcr.io

The next step is rather straightforward. Head into the command line (or whatever tool you are using) and authenticate with ghcr.io via the usual docker login ghcr.io or similar methods. Your username is your GitHub username or the organization that you want to publish the image to and your password is the personal access token. On successful login, you should see something like this:

$ podman login ghcr.io
Username: <your GitHub username/organization>
Password: <your personal access token>
Login Succeeded!

Publish images to GHCR

Once logged in, you are ready to publish your images to ghcr.io/<your GitHub username/organization>/<your package name>, for example:

$ podman push localhost/gvenzl/oracle-xe:latest ghcr.io/gvenzl/oracle-xe:latest

Introducing gvenzl/oracle-xe: Oracle Database XE Docker images

One of the things that kept me busy lately was experimenting with how much an Oracle XE database setup could be streamlined inside a Docker image for things like CI/CD consumption. Pretty much ever since I put together the first official build scripts for Oracle Database, people have asked for faster image pull and startup times to speed up their continuous integration tests. A lot of things have changed since then, and I’m happy that my engineering colleagues at Oracle have taken on the maintenance and further enhancements of Oracle’s official Docker build files and images, and integrated them into the internal processes.

Continue reading “Introducing gvenzl/oracle-xe: Oracle Database XE Docker images”

Setting up Docker on Oracle Linux 7

Docker has become widely popular in the last couple of years. I use it on a regular basis these days for running Oracle databases on my laptop. Docker is available on all popular Linux distributions, as well as Mac and Windows, and of course Oracle Linux is no exception. Since a long time Docker ships with the Oracle Linux 7 addons yum repository. Having setup Docker on Oracle Linux numerous times, I thought it would be good for me to document my steps for others to follow.

tl;dr

  1. Update Oracle Linux and UEK to the latest version (OL 7 and UEK5): yum upgrade
  2. Install yum-config-manager, if not already installed: yum install yum-utils
  3. Enable the addons yum repo: yum-config-manager --enable *addons
  4. Install docker-engine: yum install docker-engine

Continue reading “Setting up Docker on Oracle Linux 7”

Creating an Oracle REST Data Services Docker image

Oracle has added Oracle REST Data Services (ORDS) to the Docker build files family on GitHub, which means that you can now easily dockerize ORDS. If you don’t know yet what ORDS is, it’s a free technology from Oracle that allows you to REST-enable your Oracle databases. More specifically, with ORDS you can just fire off regular REST calls to modify or retrieve data from one or many Oracle databases without having to know how to write SQL; not that knowing SQL is a bad thing! 🙂 In modern application and microservices architectures REST has become more and more popular for exchanging information. ORDS enables you to easily exchange data from and to Oracle databases via REST without having to write lines and lines of code yourself.  For more information on what ORDS is and what it can do, check out Jeff Smith’s blog post about ORDS.

Continue reading “Creating an Oracle REST Data Services Docker image”

How to create small Docker images

Oracle_DockerWhen it comes to space efficiency Docker still isn’t quite as good as it could be. The layered filesystem used by Docker sometimes occupies more space than is really necessary. Over time, a couple of enhancements have made their way into Docker to allow the build of more space efficient images. The ADD instruction for example is smart enough to detect (unfortunately only) local compressed archives (and unfortunately only identity, gzipbzip2 or xz but not zip archives) and directly adds the uncompressed contents into the image, unlike the COPY instruction that simply copies a file into the image. The downside of the latter is that space is occupied for the zip archive itself and the extracted contents of the archive, whereas the former will not occupy any space for the archive as it is never added into the image.

Continue reading “How to create small Docker images”