Docker
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.
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¶
- Docker requires a 64-bit system and a Linux kernel version of 3.10 or higher.
# Check kernel version uname -r
- 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
- 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¶
- 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
- Install Docker
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io
- Verify Installation
sudo docker --version
CentOS/RHEL¶
- 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
- Install Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
- Start Docker
sudo systemctl start docker sudo systemctl enable docker
- Verify Installation
docker --version
Fedora¶
- 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
- Install Docker
sudo dnf install -y docker-ce docker-ce-cli containerd.io
- Start Docker
sudo systemctl start docker sudo systemctl enable docker
- Verify Installation
docker --version
Post-Installation¶
- Run Docker as a Non-root User
sudo usermod -aG docker $USER
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