Devops

What Is Docker In DevOps?

Description of the image

The software development industry has one of the fastest growth rates among business sectors. With a CAGR of 5.27%, the software market is projected to reach US$ 858.10bn by 2028.

This rapid growth of the software industry is driven by modern digitisation and the Internet of Things. To keep up with the growing demand for software production, multiple techniques, like DevOps, have been introduced to make the software production lifecycle more efficient. 

By combining and improving collaboration between the development and operations teams, DevOps has revolutionised the software development industry. However, various tools and technologies, such as cloud services and concepts like containerization, have significantly contributed to the success of DevOps.

Therefore, tools like Docker, which allows IT professionals and software developers to separate applications from the infrastructure for quicker software delivery, are in high demand. Leveraging such platforms can help you stay ahead of the competition.

About Docker

An open-source containerization platform that helps develop, run, and ship applications, Docker can be used by developers to package and run any software in an isolated environment, known as a container.

Running an application in a container allows independence from infrastructure. Therefore, the software deployed can run on any host computer or server without needing any specialised installation. This helps improve collaboration and standardisation during the software development procedure.

Docker Containers

Docker containers are essentially a code unit that includes everything an application requires to run. This consists of the code and its dependencies, such as system tools, system libraries, runtime environment, and settings. 

Moreover, since containers share the host operating system kernel, they are lighter than virtual machines. Containers can be built locally and added to a container registry, from where they can be deployed to any infrastructure. This helps support the principles of DevOps by enabling automated application deployment. 

Docker Architecture

Docker uses a client-server architecture where the Docker client talks to the Docker daemon which carries out the tasks for building and running containers. A Docker architecture consists of the following key parts:

Images

A read-only template that contains instructions to help create a Docker container, a Docker image is built from Dockerfiles. These images can be shared via Docker registries like Docker Hub. 

Docker Client

The Docker client is the mode of communication between Docker users and the platform for commands. 

Docker Daemon

The Docker Daemon receives the commands from the Docker client and performs the building, running, and distributing of the Docker containers. 

Containers

A container is a runtime instance of the image and helps run the application in an isolated environment. 

Dockerfile

This is a text document that contains instructions to build the Docker image. This includes command sets and arguments that can be used to auto-generate the image.

Docker Hub

This is a public registry in the form of a SaaS service provided by Docker to help share and manage Docker images. 

Docker Engine

Powering the Docker platform, a Docker Engine consists of the Daemon, a CLI, and a REST API. 

Application of Docker In DevOps

Docker is an open-source tool that can benefit both Developers and IT Operation team, therefore forming an integral part of DevOps toolchains. Docker can be applied in the following ways:

Continuous Integration

Docker helps ensure continuous integration pipelines as containers can help automate the deployment of software and applications. In addition, it allows developers to build, package, and test their applications in isolated environments, which can be further used for creating other software. 

Continuous Deployment

Docker also provides multiple tools for efficient packaging and deployment of containerized applications to production environments consistently. 

Testing

Containers provide an ideal environment for running automated tests as they are isolated and standardised. 

Infrastructure As Code

IaC is a vital principle of DevOps and developers can leverage Docker as an essential IaC tool for supplementing DevOps key strategies. 

Automation

The biggest benefit of using Docker containers is the automation of tasks such as testing, deployment, and integration of codes into a common repository. This helps save time, energy, and costs and improves the efficiency of software production. 

Monitoring And Logging

Docker containers also help generate metrics that can be analysed and monitored to gain insights into application performance for further updates. 

Benefits of Docker In DevOps

Docker, as an open-source platform, enables developers to pack and run an application in an isolated environment. In addition, it has multiple tools and an all-inclusive platform that aids the management of the lifecycle of containers, also helping with the following:

  • Develop the application and its supporting components using containers
  • Easy distribution and testing of applications within the containers
  • Quick deployment of the application in different environments 

The following are the benefits of using Docker in DevOps:

Consistent Deployments

The container-based approach of Docker enables you to create automated development and deployment workflows. For example, when you create an update for software, Docker can automatically rebuild the container, run tests, and release the new version. This aligned with the continuous integration and deployment principles of DevOps. 

Standardisation Of Environment

Since Docker containers carry all the configuration and dependencies required for running the application, it helps run the application regardless of the environment. As a result, you don’t need any environment-specific configuration to manage the application. This also helps reduce errors related to environmental inconsistencies. 

Portability

Since docker images and containers are completely portable, you can build your applications locally and deploy them to the cloud, enabling you to run them anywhere. 

Scalability

Docker-based applications can also be easily scaled up or down by adding or removing containers. This also provides greater flexibility and quicker response to changes in the demand. 

Isolation

With the self-running capability of Docker containers containing their own CPU, memory, filesystem, network interfaces, and process space, you can run multiple containers on a single host. 

Install Docker on an Ubuntu system

Update Your Packages

#Update Packages 

sudo apt-get update

Install Required Packages

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Add Docker’s Official GPG Key

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Set Up the Stable Repository

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Update the APT Package

sudo apt-get update

Install Docker Engine, Docker CLI, Containers, and Docker Compose

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Verify Docker Installation

sudo docker run hello-world

Integrating Docker with Jenkins

Step 1: Install Docker on the Jenkins Server

sudo apt-get update
sudo apt-get install docker.io
sudo usermod -aG docker jenkins

Step 2: Install Docker Plugin in Jenkins

Search for and install the "Docker Pipeline"

Step 3: Configure Docker in Jenkins

  1. Go to Manage Jenkins 
  2. Configure System
  3. Now Under the Cloud Section Add new 'Docker Cloud'
  4. Configure unix:///var/run/docker.sock

Step 4: Create a Jenkins Pipeline

pipeline {
    agent {
        docker { image 'maven:3.6.3-jdk-8' }
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
    }
}

Step 5: Run the Pipeline

pipeline {
    agent any
    environment {
        DOCKER_IMAGE = 'maven:3.6.3-jdk-8'
    }
    stages {
        stage('Build') {
            steps {
                script {
                    docker.image(DOCKER_IMAGE).inside {
                        sh 'mvn clean package'
                    }
                }
            }
        }
    }
}

Useful Commands for Docker

FunctionalityCommandDescription
Docker Version & Info
docker version
Show the Docker version information
 
docker info
Display system-wide information
Container Management
docker ps
List running containers
 
docker ps -a
List all containers (running and stopped)
 
docker run <image>
Run a new container from an image
 
docker run -d <image>
Run a container in detached mode
 
docker run -it <image>
Run a container in interactive mode with a terminal
 
docker exec -it <container-id> <command>
Run a command in a running container
 
docker stop <container-id>
Stop a running container
 
docker start <container-id>
Start a stopped container
 
docker restart <container-id>
Restart a container
 
docker rm <container-id>
Remove a container
 
docker rm $(docker ps -a -q)
Remove all stopped containers
Image Management
docker images
List all images
 
docker pull <image>
Pull an image from a registry
 
docker build -t <image-name> <path>
Build an image from a Dockerfile
 
docker tag <image> <repository>/<image>:<tag>
Tag an image with a repository and tag
 
docker push <repository>/<image>:<tag>
Push an image to a registry
 
docker rmi <image>
Remove an image
 
docker rmi $(docker images -q)
Remove all images
Volume Management
docker volume ls
List all volumes
 
docker volume create <volume-name>
Create a new volume
 
docker volume rm <volume-name>
Remove a volume
 
docker volume rm $(docker volume ls -q)
Remove all volumes
Network Management
docker network ls
List all networks
 
docker network create <network-name>
Create a new network
 
docker network rm <network-name>
Remove a network
 
docker network rm $(docker network ls -q)
Remove all networks
Docker Compose
docker-compose up
Create and start containers defined in docker-compose.yml
 
docker-compose up -d
Start containers in detached mode
 
docker-compose down
Stop and remove containers, networks, volumes, and images
 
docker-compose ps
List containers defined in docker-compose.yml
 
docker-compose logs
View logs of containers
 
docker-compose build
Build or rebuild services
 
docker-compose pull
Pull service images
 
docker-compose exec <service> <command>
Execute a command in a running service container
Container Logs
docker logs <container-id>
View logs of a container
 
docker logs -f <container-id>
Follow the logs of a container
Inspect & Stats
docker inspect <container-id>
Return low-level information on Docker objects
 
docker stats
Display a live stream of container resource usage statistics
Export & Import
docker save -o <file> <image>
Save an image to a tar archive
 
docker load -i <file>
Load an image from a tar archive
 
docker export <container-id> -o <file>
Export a container’s filesystem as a tar archive
 
docker import <file>
Import the contents from a tarball to create a filesystem image

Conclusion

The Docker platform can prove to be an essential tool for any DevOps-based software production lifecycle. With multiple tools and services that facilitate efficient workflows, Docker helps boost productivity. 

It helps ensure a standard environment, provides security, and improves the scalability of a project. Moreover, Docker addresses different challenges faced by the DevOps team during the optimization of the application lifecycle. The use of Docker can open up different possibilities for creating scalable, automated workflows to help build and release applications.

Read More

https://devopsden.io/article/is-heroku-a-devops-tool

Follow us on

https://www.linkedin.com/company/devopsden/

Table of Contents

    Subscribe to Us

    Always Get Notified