Build Docker Image [Ubuntu 20] Using Packer and Push to GitLab Registry with GitHub Actions

S3CloudHub - Sep 9 - - Dev Community

1.Introduction
Automating the build and deployment of Docker images is essential for modern DevOps practices. In this tutorial, we’ll use Packer to create a Docker image based on Ubuntu 20.04 and push it to GitLab Container Registry using GitHub Actions. This automation streamlines your workflow and enhances reproducibility.

Image description

Why Use GitLab for CI/CD?
GitLab integrates source control, CI/CD pipelines, and container storage into a single platform, streamlining your development workflow. The GitLab Container Registry allows you to manage Docker images alongside your code, making the transition from development to production seamless and efficient.

2.Prerequisites
Before starting, ensure you have:

  • A GitHub account
  • A GitLab account
  • Basic knowledge of Docker, Packer, and GitHub Actions
  • Packer and GitHub CLI installed on your local machine

3.Setting Up Packer
Installing Packer

To get started, download and install Packer from the official Packer website. Follow the installation instructions for your operating system.

Creating a Packer Configuration

For this guide, we’ll use Packer’s HashiCorp Configuration Language (HCL) to define our Docker image build process. Create a file named packer-template.pkr.hcl with the following content:

# packer-template.pkr.hcl
packer {
  required_version = ">= 1.7.0"
}

source "docker" "ubuntu" {
  image = "ubuntu:20.04"
  commit = true
}

build {
  sources = [
    "source.docker.ubuntu"
  ]

  provisioner "shell" {
    inline = [
      "apt-get update",
      "apt-get install -y <your-packages>"
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

4. Building the Docker Image with Packer
Writing the Packer Configuration

Customize the packer-template.pkr.hcl file to include the necessary software and configurations for your Docker image. This configuration file will instruct Packer to build an image based on Ubuntu 20.04 and install additional packages as specified.

Building the Image

Run the following command to build the Docker image:

packer build packer-template.pkr.hcl
Enter fullscreen mode Exit fullscreen mode

5.Setting Up GitHub Actions
Creating a GitHub Actions Workflow

Create a GitHub Actions workflow file (e.g., .github/workflows/docker-build.yml) with the following content:

name: Build and Push Docker Image

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Log in to GitLab Docker Registry
        uses: docker/login-action@v2
        with:
          registry: registry.gitlab.com
          username: ${ { secrets.GITLAB_USERNAME } }
          password: ${ { secrets.GITLAB_ACCESS_TOKEN } }

      - name: Build Docker image
        run: |
          docker build -t registry.gitlab.com/<your-namespace>/<your-repo>:latest .

      - name: Push Docker image
        run: |
          docker push registry.gitlab.com/<your-namespace>/<your-repo>:latest
Enter fullscreen mode Exit fullscreen mode

6.Pushing the Docker Image to GitLab Container Registry

Setting Up GitLab Container Registry

Ensure you have the GitLab Container Registry set up in your GitLab project. You’ll need the project path and registry URL for the subsequent steps.

Adding GitLab Registry Credentials to GitHub Actions

Store your GitLab credentials as GitHub Actions secrets. Navigate to your GitHub repository settings, find the “Secrets and variables” section, and add GITLAB_USERNAME and GITLAB_ACCESS_TOKEN.

Pushing the Image

The GitHub Actions workflow will handle the automated building and pushing of your Docker image to the GitLab Container Registry whenever changes are pushed to the main branch.

7.Conclusion
TBy following this guide, you’ve set up an automated pipeline for building Docker images with Packer and deploying them to GitLab Container Registry using GitHub Actions. This setup enhances your development workflow and ensures a consistent and reliable deployment process.

Explore more detailed content and step-by-step guides on our YouTube channel:-
image alt text here

Connect with Us!
Stay connected with us for the latest updates, tutorials, and exclusive content:

WhatsApp:- https://www.whatsapp.com/channel/0029VaeX6b73GJOuCyYRik0i
facebook:- https://www.facebook.com/S3CloudHub
youtube:- https://www.youtube.com/@s3cloudhub
github:- https://github.com/S3CloudHubRepo
blog:- https://s3cloudhub.blogspot.com/

Connect with us today and enhance your learning journey!

DevOps #CloudComputing #AWS #Azure #GoogleCloud #CloudNative #Kubernetes #Containers #Docker #CI/CD #InfrastructureAsCode #Serverless #Automation #Monitoring #Microservices #LoadBalancing #SiteReliabilityEngineering #SRE #Security #CloudPerformance #Scaling #Observability #DevOpsTools #SysAdmin #ITOps

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .