There are 3 typical ways to deploy a web application or install a system application:
You need to install:
You need to install:
You need to install:
Key Advantage: No kernel operating system is required because containers share the host operating system's kernel.
✓ Faster
✓ More portable
✓ More efficient (CPU, RAM, disk)
✓ Highly scalable
Only problem: Isolation - Virtual machines provide the best isolation among applications, but containers provide better isolation than physical machines.
A container engine (also known as container runtime) is a software component responsible for creating, managing, and running containers on a host system.
The most popular container engine:
Dockerfile --[build]--> Image --[run]--> Container (instance)
Tool for defining and running multi-container Docker applications.
.env file or environment variables passed directly to docker-composedocker-compose up command to:Especially useful for applications with multiple interconnected services:
# Update repositories
sudo apt-get -y update
# Install dependencies
sudo apt-get -y install apt-transport-https ca-certificates curl gnupg2 gpg lsb-release
# Add Docker GPG key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian trixie stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Update and install Docker
sudo apt-get -y update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Check Docker service status
sudo systemctl status docker
# Verify the service is started and enabled
# Add your user to the docker group
sudo gpasswd -a $USER docker
# Log out and log in, then verify membership
id
# Should show docker group (984)
# Check Docker version
docker --version
docker pull <image_name:version>
# Examples:
docker pull photon:3.0
docker pull mysql:8.0
docker images
# Shows all downloaded images with repository, tag, image ID, created date, and size
docker rmi <image_id>
# or
docker rmi <image_name:tag>
# Example:
docker rmi mysql:8.0
docker search <image_name>
# Example:
docker search nginx
docker run <image_name>
# Run in detached mode (background)
docker run -d <image_name>
# Run with name
docker run --name <container_name> <image_name>
# Run with port mapping
docker run -p <host_port>:<container_port> <image_name>
# Example: Run nginx with port mapping
docker run -d -p 8080:80 --name my-nginx nginx
# List running containers
docker ps
# List all containers (including stopped)
docker ps -a
# List only container IDs
docker ps -q
docker stop <container_id>
# or
docker stop <container_name>
docker start <container_id>
# or
docker start <container_name>
docker restart <container_id>
# Must be stopped first
docker rm <container_id>
# Force remove (even if running)
docker rm -f <container_id>
docker exec <container_id> <command>
# Interactive shell
docker exec -it <container_id> /bin/bash
# or
docker exec -it <container_id> sh
docker logs <container_id>
# Follow log output
docker logs -f <container_id>
# Show last N lines
docker logs --tail 100 <container_id>
docker inspect <container_id>
# Returns detailed information in JSON format
docker info
docker system df
# Remove all stopped containers
docker container prune
# Remove all unused images
docker image prune
# Remove all unused volumes
docker volume prune
# Remove all unused networks
docker network prune
# Clean up everything (use with caution!)
docker system prune
docker volume create <volume_name>
docker volume ls
docker volume rm <volume_name>
docker volume inspect <volume_name>
docker network ls
docker network create <network_name>
docker network rm <network_name>
docker network inspect <network_name>
docker build -t <image_name:tag> <path_to_dockerfile_directory>
# Example:
docker build -t myapp:1.0 .
docker build -f <dockerfile_name> -t <image_name:tag> .
docker-compose up
# Start in detached mode
docker-compose up -d
docker-compose down
# Stop and remove volumes
docker-compose down -v
docker-compose logs
# Follow logs
docker-compose logs -f
docker-compose ps
docker-compose exec <service_name> <command>
| Task | Command |
|---|---|
| Pull image | docker pull <image> |
| List images | docker images |
| Remove image | docker rmi <image> |
| Run container | docker run <image> |
| List running containers | docker ps |
| List all containers | docker ps -a |
| Stop container | docker stop <container> |
| Remove container | docker rm <container> |
| View logs | docker logs <container> |
| Execute command | docker exec -it <container> <cmd> |
| Build image | docker build -t <name> . |
Note: This document provides an overview of fundamental Docker concepts and commands as presented in https://www.collados.org/asix1/sm1/tasks/sm1act11/sm1act11.html