Install Docker, manage containers, images, and use Docker Compose on Linux.
Category: Docker
Install Docker on Ubuntu
# Remove old versions
sudo apt remove docker docker-engine docker.io containerd runc
# Install dependencies
sudo apt update && sudo apt install -y ca-certificates curl gnupg
# Add Docker's GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Add the repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") 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 docker-buildx-plugin docker-compose-plugin
# Verify
docker --version
Run Docker Without sudo
sudo usermod -aG docker $USER
newgrp docker
Essential Docker Commands
# Pull an image
docker pull nginx:latest
# Run a container
docker run -d -p 80:80 --name webserver nginx
# List running containers
docker ps
# List all containers (including stopped)
docker ps -a
# Stop and remove a container
docker stop webserver
docker rm webserver
# View container logs
docker logs webserver -f
# Execute a command inside a running container
docker exec -it webserver bash
Image Management
# List images
docker images
# Remove an image
docker rmi nginx:latest
# Remove all unused images
docker image prune -a
# Build an image from a Dockerfile
docker build -t myapp:1.0 .
Docker Compose
Create a docker-compose.yml for a multi-container stack:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
# Start the stack
docker compose up -d
# Stop the stack
docker compose down
# View logs
docker compose logs -f
Clean Up
# Remove all stopped containers, unused networks, images, and build cache
docker system prune -a --volumes