Docker

Complete guide for installing and using Docker on Debian Linux.

What is Docker?

Docker is a platform for developing, shipping, and running applications in containers. Containers package software with all dependencies, ensuring consistent behavior across different environments.

Installation on Debian

Step 1: Install Prerequisites

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Step 2: Add Docker's Official GPG Key

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Step 3: Add Docker Repository

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

Step 4: Install Docker

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Step 5: Verify Installation

Check Docker status:

sudo systemctl status docker

Test Docker with hello-world:

sudo docker run hello-world

If you see "Hello from Docker!", installation was successful!

Post-Installation: Run Docker Without Sudo

Add your user to the docker group:

sudo usermod -aG docker $USER

Log out and back in for changes to take effect. Then you can run:

docker run hello-world

Basic Docker Commands

List running containers

docker ps

List all containers (including stopped)

docker ps -a

List downloaded images

docker images

Pull an image from Docker Hub

docker pull nginx

Run a container

docker run -d -p 80:80 nginx

Stop a container

docker stop <container_id>

Remove a container

docker rm <container_id>

Remove an image

docker rmi <image_name>

Docker Compose

Install Docker Compose for managing multi-container applications:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Verify installation:

docker-compose --version

Example docker-compose.yml

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

Start services:

docker-compose up -d

Common Use Cases

Run a Web Server (Nginx)

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

Visit http://localhost:8080 to see the default Nginx page.

Run a Database (MySQL)

docker run -d -p 3306:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=mypass mysql:5.7

Run a WordPress Site

docker run -d -p 8000:80 --name wordpress -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_PASSWORD=mypass wordpress

Maintenance

Clean up unused containers and images

docker system prune -a

View container logs

docker logs <container_id>

Execute commands in a running container

docker exec -it <container_id> /bin/bash

Additional Resources

User