September 12, 2019 By Vidyasagar Machupalli 3 min read

Explore the capabilities of a tool called S2I (Source-to-Image).

Recently, while drafting an OpenShift solution tutorial, I explored an interesting tool called S2I (Source-to-Image). In this post, you will learn how to create a container image directly from your source code and push the generated container image to a private IBM Cloud Container registry.

What is S2I (Source-to-Image)?

S2I is a tool for building reproducible, Docker-formatted container images. It produces ready-to-run images by injecting application source into a container image and assembling a new image. The new image incorporates the base image (the builder) and built source and is ready to use with the docker runcommand. S2I supports incremental builds, which re-use previously downloaded dependencies, previously built artifacts, etc.

Installation and setup

Let’s start by installing S2I on your machine. 

You can install the s2i binary using go get, which will download the source-to-image code into your $GOPATH, build the s2i binary, and install it into your $GOPATH/bin:

$ go get

For Mac, You can either follow the installation instructions for Linux (and use the darwin-amd64 link) or you can just install source-to-image with Homebrew:

$ brew install source-to-image

Follow the instructions here to install on other operating systems.

To confirm the installation, run the below command on a terminal or command prompt:

$ s2i 

Follow the instructions mentioned in the link here to set up the IBM Cloud Container Registry CLI and your registry namespace.

Once created, open the terminal and export the MYNAMESPACE environment variable pointing to your Registry namespace:


Let’s build

The s2i build command provides two options to generate a new container image: 

  1. Build a Docker image from a remote Git repository:
    • Usage: s2i build <source> <image> [<tag>] [flags]
    • $ s2i build nodeshift/centos7-s2i-nodejs:latest$MYNAMESPACE/webapp
  2. Build from a local directory. If this directory is a git repo, the current commit will be built:
    • Clone the get-started-node Git repo and run the below command
    • $ s2i build . nodeshift/centos7-s2i-nodejs:latest$MYNAMESPACE/webapplocal

Even before building an image, you can see the generated Dockerfile by appending --as-dockerfile Dockerfile to your build commands.

Once generated, check the contents of the generated Dockerfile:

$ cat Dockerfile

To understand the S2I requirements and the artifacts of the generated Dockerfile, see the documentation

Run the app locally and push it to private registry

Check the generated Docker image by running it locally with the following command:

$ docker run -p 3000:3000 -it$MYNAMESPACE/webapp

Launch a browser and point to http://localhost3000 to see the app running locally:

Push the container image to the private IBM Cloud Container Registry. Don’t forget to log into the container registry with ibmcloud cr login command:

$ docker push$MYNAMESPACE/webapp

You can check the container image by running the following command:

$ ibmcloud cr images

What’s next?

Was this article helpful?

More from Cloud

The history of the central processing unit (CPU)

10 min read - The central processing unit (CPU) is the computer’s brain. It handles the assignment and processing of tasks, in addition to functions that make a computer run. There’s no way to overstate the importance of the CPU to computing. Virtually all computer systems contain, at the least, some type of basic CPU. Regardless of whether they’re used in personal computers (PCs), laptops, tablets, smartphones or even in supercomputers whose output is so strong it must be measured in floating-point operations per…

A clear path to value: Overcome challenges on your FinOps journey 

3 min read - In recent years, cloud adoption services have accelerated, with companies increasingly moving from traditional on-premises hosting to public cloud solutions. However, the rise of hybrid and multi-cloud patterns has led to challenges in optimizing value and controlling cloud expenditure, resulting in a shift from capital to operational expenses.   According to a Gartner report, cloud operational expenses are expected to surpass traditional IT spending, reflecting the ongoing transformation in expenditure patterns by 2025. FinOps is an evolving cloud financial management discipline…

IBM Power8 end of service: What are my options?

3 min read - IBM Power8® generation of IBM Power Systems was introduced ten years ago and it is now time to retire that generation. The end-of-service (EoS) support for the entire IBM Power8 server line is scheduled for this year, commencing in March 2024 and concluding in October 2024. EoS dates vary by model: 31 March 2024: maintenance expires for Power Systems S812LC, S822, S822L, 822LC, 824 and 824L. 31 May 2024: maintenance expires for Power Systems S812L, S814 and 822LC. 31 October…

IBM Newsletters

Get our newsletters and topic updates that deliver the latest thought leadership and insights on emerging trends.
Subscribe now More newsletters