Skip to content

Docker

cyber-security

What is Docker

Docker is an open-source platform that automates the deployment, scaling, and management of applications by isolating them into lightweight, portable containers. Containers are standalone executable units that encapsulate all necessary dependencies, libraries, and configuration files required for an application to run consistently across various environments.

Docker Concepts

Get started learning the core concepts of containers, images, registries, and Docker Compose.

cyber-security

Summary

  • Docker Image: Think of it as a "recipe" for making a dish.

  • Docker Container: The actual "dish" prepared from the recipe. It is interactive, consumable, and can be modified during use.

Container

Image

Registry

Compose

Prerequisites

  1. Docker requires a 64-bit system and a Linux kernel version of 3.10 or higher.
    # Check kernel version
    uname -r
    
  2. Update Package Index: Ensure your system is up to date.
    # Update command
    sudo apt update && sudo apt upgrade -y  # Debian/Ubuntu-based
    sudo yum update -y                     # RHEL/CentOS-based
    sudo dnf update -y                     # Fedora
    sudo zypper refresh && sudo zypper update -y  # openSUSE
    
  3. Install Required Tools
    # Common prerequisites
    sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
    

Warning

Replace apt with the relevant package manager for your distro

Installation

Ubuntu/Debian

  1. Add Docker’s official GPG key and repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Install Docker
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io
    
  2. Verify Installation
    sudo docker --version
    

CentOS/RHEL

  1. Add Docker’s repository
    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  2. Install Docker
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    
  3. Start Docker
    sudo systemctl start docker
    sudo systemctl enable docker
    
  4. Verify Installation
docker --version

Fedora

  1. Add Docker’s repository
    sudo dnf -y install dnf-plugins-core
    sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
    
  2. Install Docker
    sudo dnf install -y docker-ce docker-ce-cli containerd.io
    
  3. Start Docker
    sudo systemctl start docker
    sudo systemctl enable docker
    
  4. Verify Installation
    docker --version
    

Post-Installation

  1. Run Docker as a Non-root User

sudo usermod -aG docker $USER
2. Test Docker Installation

docker run hello-world

Upgrade / Migrate

Docker Commands

General Commands

docker --version
docker info

Docker Images

docker images
docker pull <image>
docker build -t <image-name>:<tag> <path>
docker rmi <image-id>
docker rmi $(docker images -q)
docker tag <source-image> <target-image>
docker save -o <filename>.tar <image>
docker load -i <filename>.tar

## Advanced

docker image ls               # List images (alias for 'docker images')
docker image prune            # Remove unused images
docker image inspect <image>  # Inspect details of an image
docker image history <image>  # Show history of an image
docker image tag <image> <new-image>  # Tag an image with a new name
docker image rm <image>       # Remove a specific image

Docker Containers

docker ps
docker ps -a
docker run <image>
docker run -d <image>
docker run -it <image>
docker run --name <container-name> <image>
docker run -p <host-port>:<container-port> <image>
docker start <container-id>
docker stop <container-id>
docker restart <container-id>
docker kill <container-id>
docker rm <container-id>
docker rm $(docker ps -a -q)
docker logs <container-id>
docker exec -it <container-id> <command>
docker attach <container-id>

## Advanced 

docker container ls                   # List running containers (alias for 'docker ps')
docker container prune                # Remove all stopped containers
docker container inspect <container> # Inspect details of a container
docker container stats <container>    # Show stats for running containers
docker container top <container>      # Display running processes in a container
docker container rename <old-name> <new-name>  # Rename a container
docker container cp <container>:<path> <host-path>  # Copy files from container to host
docker container wait <container>     # Block until a container stops
docker container pause <container>    # Pause a running container
docker container unpause <container>  # Unpause a paused container
docker container update <container>   # Update resource limits for a container
docker container diff <container>     # Inspect changes to container's filesystem

Docker Volumes

docker volume ls
docker volume create <volume-name>
docker volume rm <volume-name>
docker run -v <volume-name>:<container-path> <image>

## Advanced

docker volume inspect <volume>   # View details of a volume
docker volume prune              # Remove unused volumes

Docker Networks

docker network ls
docker network create <network-name>
docker network rm <network-name>
docker network connect <network-name> <container-id>
docker network disconnect <network-name> <container-id>

## Advanced 

docker network inspect <network>  # View details of a network
docker network prune              # Remove unused networks
docker network ls                 # List available networks
docker network disconnect <network> <container>  # Disconnect container from a network

Docker Compose

docker-compose up
docker-compose down
docker-compose ps
docker-compose logs
docker-compose build
docker-compose restart
docker-compose up -d
docker-compose exec <service> <command>

Docker System Commands

docker system df
docker system prune
docker system prune -a

Docker Logs and Monitoring

docker logs -f <container>        # Follow container logs
docker events                     # Stream Docker events in real-time
docker stats                      # Show live resource usage stats for containers

Docker Swarm

docker swarm init                         # Initialize a swarm cluster
docker swarm join <options>               # Add a node to the swarm
docker swarm leave                        # Remove a node from the swarm
docker node ls                            # List swarm nodes
docker service create --name <service> <image>  # Create a service in swarm mode
docker service ls                         # List services in swarm mode
docker service ps <service>               # List tasks of a service
docker service rm <service>               # Remove a service
docker stack deploy -c <compose-file> <stack-name>  # Deploy a stack in swarm
docker stack ls                           # List all stacks
docker stack ps <stack-name>              # List tasks in a stack
docker stack rm <stack-name>              # Remove a stack

Miscellaneous Commands

docker stats
docker inspect <container-id or image-id>
docker history <image>
docker export <container-id> > <filename>.tar
docker import <filename>.tar <image-name>
docker run --rm <image>

Docker Configurations

docker config create <config-name> <file>  # Create a configuration
docker config ls                          # List all configurations
docker config inspect <config-name>       # View configuration details
docker config rm <config-name>            # Remove a configuration

Docker Secrets

docker secret create <secret-name> <file>  # Create a secret
docker secret ls                          # List all secrets
docker secret inspect <secret-name>       # View secret details
docker secret rm <secret-name>            # Remove a secret

Docker Context

docker context create <context-name>      # Create a new context
docker context ls                         # List available contexts
docker context use <context-name>         # Switch contexts
docker context inspect <context-name>     # Inspect context details
docker context rm <context-name>          # Remove a context

Docker Build

docker build -t <image-name>:<tag> <path>    # Build a Docker image
docker build --no-cache -t <image-name> .   # Build without cache
docker buildx build -t <image-name>:<tag> <path>  # Build multi-platform images
docker buildx create --name <builder>       # Create a new builder
docker buildx use <builder>                 # Use a specific builder

Docker Export/Import

docker export <container-id> > <filename>.tar  # Export a container’s filesystem
docker import <filename>.tar <image-name>      # Import a tar file as an image
docker save -o <filename>.tar <image-name>     # Save an image to a tar archive
docker load -i <filename>.tar                  # Load an image from a tar archive

Docker Cleanup

docker system prune --all --volumes        # Remove unused data including images, volumes
docker image prune                         # Remove unused images
docker container prune                     # Remove stopped containers
docker volume prune                        # Remove unused volumes
docker network prune                       # Remove unused networks

Docker Daemon and Configuration

docker system info                          # Display Docker system info
docker system df                            # Show disk usage
docker system events                        # Stream Docker events
docker update --memory <value> <container> # Update container resource limits

This list provides a deeper dive into Docker's capabilities. You can always refer to Docker’s CLI reference for exhaustive details.

docker --help
docker <command> --help

Resources

Books

Portals

Videos

Blog and Articles

Tools

Forums and Communities