Screenshot from the article

Docker Containers: A Complete Guide with Real-World Examples

Introduction

Docker has revolutionized the way we develop, deploy, and manage applications by providing a lightweight, portable, and efficient containerization platform. This blog explores Docker in-depth, covering installation, configuration, real-world use cases, advanced techniques, and troubleshooting common issues.

1. What is Docker?

Docker is an open-source containerization platform that enables developers to package applications and their dependencies into lightweight, portable containers. Containers ensure consistency across development, testing, and production environments.

Key Benefits of Docker:

  • Portability: Run anywhere (local machine, cloud, on-premises servers)
  • Isolation: Containers run independently with their own dependencies
  • Scalability: Easily scale up/down based on demand
  • Efficiency: Lightweight compared to virtual machines

2. Installing Docker

Linux (Ubuntu Example)

sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker

Windows & Mac

Download and install Docker Desktop from Docker’s official website.

Verify the installation:

docker --version

3. Basic Docker Commands

Pulling an Image

docker pull nginx

Running a Container

docker run -d --name my-nginx -p 8080:80 nginx

Listing Containers

docker ps -a

Stopping and Removing Containers

docker stop my-nginx
docker rm my-nginx

4. Docker Real-World Use Cases

A. Microservices Architecture

Docker is widely used in microservices-based applications. Each service runs in its own container, making it easy to deploy, scale, and update independently.

Example: Running a Simple Microservice

docker run -d --name user-service -p 5000:5000 python:3.9 python app.py

B. CI/CD Pipelines

Docker integrates seamlessly with Jenkins, GitHub Actions, and GitLab CI/CD for automated builds and deployments.

Example: Dockerized CI/CD Pipeline in Jenkins

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'docker build -t my-app .'
            }
        }
        stage('Deploy') {
            steps {
                sh 'docker run -d -p 8080:80 my-app'
            }
        }
    }
}

C. Running Databases in Containers

Instead of installing databases manually, Docker allows running them as containers.

Example: Running PostgreSQL

docker run -d --name postgres-db -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres

5. Advanced Docker Concepts

A. Docker Compose (Multi-Container Applications)

For running multi-container applications, use Docker Compose.

Example: docker-compose.yml for WordPress

version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_PASSWORD: rootpass

Run with:

docker-compose up -d

B. Docker Networking

Example: Creating a Custom Network

docker network create my_network
docker run -d --name app --network my_network nginx

C. Docker Security Best Practices

  • Use official images from Docker Hub
  • Run containers with non-root users
  • Scan images for vulnerabilities (docker scan my-image)
  • Restrict container privileges

6. Troubleshooting Common Docker Issues

A. Container Exiting Immediately

Issue:

$ docker run ubuntu
docker: Error response from daemon: container exited immediately.

Fix: Run an interactive shell:

docker run -it ubuntu bash

B. Port Binding Issues

Issue:

$ docker run -d -p 80:80 nginx
Bind for 0.0.0.0:80 failed: port already allocated.

Fix: Stop conflicting services or use a different port:

docker run -d -p 8080:80 nginx

7. FAQs

Q1. What is the difference between Docker and Kubernetes?

Docker is a containerization tool, while Kubernetes is an orchestration platform to manage multiple containers at scale.

Q2. How do I persist data in Docker?

Use Docker volumes:

docker volume create my_data
docker run -d -v my_data:/data my-container

Q3. Can I run GUI applications inside a Docker container?

Yes, use X11 forwarding or tools like VNC to run GUI applications inside containers.

Conclusion

Docker has transformed the way applications are developed, deployed, and managed. From microservices to CI/CD automation, it provides flexibility and efficiency in modern software development. By mastering Docker, developers and DevOps engineers can streamline workflows, improve scalability, and ensure consistency across environments.

Start Dockerizing your applications today!

📢 Have questions or feedback? Drop a comment below or connect with me on Twitter/X@spysood!

Originally published on Medium.