Back to Blog

Automating Docker Build Process Using Shell Script: A Comprehensive Guide

(1 rating)

Learn how to automate your Docker build process using shell scripts, streamlining your development workflow and improving efficiency. This guide covers the tools, environment, and best practices for automating Docker builds with shell scripts.

A diverse group of friends, including a person in a wheelchair, enjoying quality time outdoors in Portugal.
A diverse group of friends, including a person in a wheelchair, enjoying quality time outdoors in Portugal. • Photo by Kampus Production on Pexels

Introduction

Docker has revolutionized the way we package, ship, and run applications. However, manually building and managing Docker images can be tedious and error-prone. Automating the Docker build process using shell scripts can help simplify your workflow, reduce errors, and improve overall productivity. In this post, we'll explore the tools, environment, and best practices for automating Docker builds with shell scripts.

Prerequisites

Before we dive into the automation process, make sure you have the following prerequisites:

  • Docker installed on your system
  • Basic understanding of shell scripting (Bash or similar)
  • A code editor or IDE of your choice

Setting Up the Environment

To automate the Docker build process, you'll need to set up a few tools and environment variables. Let's start by creating a new directory for our project and navigating into it:

1mkdir my-docker-project
2cd my-docker-project

Next, create a new file called docker-compose.yml to define our Docker services:

1version: '3'
2services:
3  web:
4    build: .
5    ports:
6      - "80:80"
7    depends_on:
8      - db
9  db:
10    image: postgres
11    environment:
12      - POSTGRES_USER=myuser
13      - POSTGRES_PASSWORD=mypassword

This docker-compose.yml file defines two services: web and db. The web service builds the Docker image from the current directory (.), maps port 80 on the host machine to port 80 in the container, and depends on the db service. The db service uses the official Postgres image and sets environment variables for the database user and password.

Creating the Dockerfile

The Dockerfile is where we define the build process for our Docker image. Let's create a new file called Dockerfile in the project directory:

1# Use the official Python image as a base
2FROM python:3.9-slim
3
4# Set the working directory to /app
5WORKDIR /app
6
7# Copy the requirements file
8COPY requirements.txt .
9
10# Install the dependencies
11RUN pip install -r requirements.txt
12
13# Copy the application code
14COPY . .
15
16# Expose port 80
17EXPOSE 80
18
19# Run the command to start the development server
20CMD ["python", "app.py"]

This Dockerfile uses the official Python 3.9 image as a base, sets the working directory to /app, copies the requirements.txt file, installs the dependencies, copies the application code, exposes port 80, and sets the default command to run the development server.

Automating the Build Process

Now that we have our docker-compose.yml and Dockerfile in place, let's create a shell script to automate the build process. Create a new file called build.sh:

1#!/bin/bash
2
3# Build the Docker image
4docker-compose build
5
6# Push the image to Docker Hub (optional)
7# docker tag my-docker-project:latest <your-username>/my-docker-project:latest
8# docker push <your-username>/my-docker-project:latest

This build.sh script builds the Docker image using docker-compose build. You can also add optional commands to push the image to Docker Hub.

Running the Script

Make the script executable by running the following command:

1chmod +x build.sh

Then, run the script:

1./build.sh

This will build the Docker image and create a my-docker-project image in your local Docker registry.

Common Pitfalls and Mistakes to Avoid

When automating the Docker build process, keep the following common pitfalls and mistakes in mind:

  • Forgetting to update the docker-compose.yml file when changing the Dockerfile
  • Not using environment variables for sensitive data (e.g., database passwords)
  • Not testing the Docker image before deploying it to production
  • Not using a consistent naming convention for Docker images and tags

Best Practices and Optimization Tips

To optimize your Docker build process, follow these best practices:

  • Use a consistent naming convention for Docker images and tags
  • Use environment variables for sensitive data
  • Test the Docker image before deploying it to production
  • Use a CI/CD pipeline to automate the build, test, and deployment process
  • Use Docker layers to optimize image size and build time

Real-World Example

Let's say you're building a web application using Flask and Postgres. You can use the docker-compose.yml and Dockerfile examples above to automate the build process. You can also add additional services, such as Redis or Celery, to the docker-compose.yml file.

Conclusion

Automating the Docker build process using shell scripts can simplify your workflow, reduce errors, and improve overall productivity. By following the steps outlined in this guide, you can create a repeatable and efficient build process for your Docker images. Remember to keep common pitfalls and mistakes in mind and follow best practices to optimize your build process.

Comments

Leave a Comment

Was this article helpful?

Rate this article

4.4 out of 5 based on 1 rating