0
0
Jenkinsdevops~5 mins

Pushing images to registry in Jenkins - Commands & Configuration

Choose your learning style9 modes available
Introduction
When you build a container image, you need to save it somewhere so others can use it. Pushing images to a registry lets you store and share your container images easily.
When you want to share your app's container image with your team.
When you need to deploy your app on a cloud service that pulls images from a registry.
When you want to keep a backup of your container images in a central place.
When you want to automate image storage as part of your Jenkins pipeline.
When you want to update your app by pushing a new image version to the registry.
Config File - Jenkinsfile
Jenkinsfile
pipeline {
  agent any
  environment {
    REGISTRY = 'docker.io'
    IMAGE_NAME = 'my-app'
    IMAGE_TAG = 'v1.0'
    REGISTRY_CREDENTIALS = 'dockerhub-credentials'
  }
  stages {
    stage('Build Image') {
      steps {
        script {
          sh 'docker build -t $REGISTRY/$IMAGE_NAME:$IMAGE_TAG .'
        }
      }
    }
    stage('Login to Registry') {
      steps {
        script {
          withCredentials([usernamePassword(credentialsId: env.REGISTRY_CREDENTIALS, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
            sh 'echo $PASSWORD | docker login $REGISTRY -u $USERNAME --password-stdin'
          }
        }
      }
    }
    stage('Push Image') {
      steps {
        script {
          sh 'docker push $REGISTRY/$IMAGE_NAME:$IMAGE_TAG'
        }
      }
    }
  }
}

This Jenkinsfile defines a pipeline with three stages:

  • Build Image: Builds the Docker image with a tag.
  • Login to Registry: Logs into the Docker registry securely using stored credentials.
  • Push Image: Pushes the built image to the registry.

Environment variables store registry info and credentials ID for easy updates.

Commands
This command builds a Docker image from the current folder and tags it with the registry address, image name, and version tag.
Terminal
docker build -t docker.io/my-app:v1.0 .
Expected OutputExpected
Sending build context to Docker daemon 8.192kB Step 1/5 : FROM alpine:3.14 ---> a24bb4013296 Step 2/5 : COPY . /app ---> Using cache ---> 5d5c3f3a1a2b Step 3/5 : RUN apk add --no-cache curl ---> Running in 7a8f9c3b4d5e Removing intermediate container 7a8f9c3b4d5e ---> 9c1f2d3e4b5a Step 4/5 : CMD ["/app/start.sh"] ---> Running in 3b2a1c4d5e6f Removing intermediate container 3b2a1c4d5e6f ---> 7e8f9a0b1c2d Step 5/5 : LABEL version="v1.0" ---> Running in 4d5e6f7a8b9c Removing intermediate container 4d5e6f7a8b9c ---> 1a2b3c4d5e6f Successfully built 1a2b3c4d5e6f Successfully tagged docker.io/my-app:v1.0
-t - Tags the image with name and version
Logs into Docker Hub registry securely by passing the password through standard input to avoid exposing it in the command line.
Terminal
echo mypassword | docker login docker.io -u myusername --password-stdin
Expected OutputExpected
Login Succeeded
--password-stdin - Reads password from standard input for security
Pushes the tagged image to the Docker Hub registry so others can pull and use it.
Terminal
docker push docker.io/my-app:v1.0
Expected OutputExpected
The push refers to repository [docker.io/my-app] 123456789abc: Pushed latest: digest: sha256:abcdef1234567890 size: 1234
Key Concept

If you remember nothing else from this pattern, remember: you must build, log in, then push your image to share it in a registry.

Common Mistakes
Trying to push an image without logging into the registry first
Docker will reject the push because it does not know who you are or if you have permission.
Always run 'docker login' with your credentials before pushing images.
Forgetting to tag the image with the registry address before pushing
Docker tries to push to the default local repository, which does not exist remotely.
Use the '-t' flag with the full registry path when building or tagging the image.
Exposing your password directly in the command line
Passwords can be seen by other users on the system or saved in shell history.
Use '--password-stdin' and pass the password securely via echo or environment variables.
Summary
Build your Docker image with a tag that includes the registry address.
Log in securely to the Docker registry using stored credentials.
Push the tagged image to the registry so it can be shared and deployed.