Docker

Install Docker, manage containers, images, and use Docker Compose on Linux.

Contents

  1. Install Docker on Ubuntu
  2. Run Docker Without sudo
  3. Essential Docker Commands
  4. Image Management
  5. Docker Compose
  6. Clean Up

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