🐳 Docker Fundamentals
Learn the basics of Docker containerization and how to use it effectively for development and deployment.
What is Docker?
Docker is a platform that uses OS-level virtualization to deliver software in packages called containers. Containers are isolated from one another and bundle their own software, libraries, and configuration files.
Installation
Ubuntu/Debian
# Remove old versions
sudo apt remove docker docker-engine docker.io containerd runc
# Install prerequisites
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# Add Docker's official GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Set up repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Add user to docker group
sudo usermod -aG docker $USEREssential Commands
Container Management
# Run a container
docker run -d --name myapp -p 8080:80 nginx
# List running containers
docker ps
# List all containers
docker ps -a
# Stop a container
docker stop myapp
# Remove a container
docker rm myapp
# View container logs
docker logs myapp
# Execute command in container
docker exec -it myapp bashImage Management
# Pull an image
docker pull nginx:latest
# List images
docker images
# Remove an image
docker rmi nginx:latest
# Build an image
docker build -t myapp:v1 .Dockerfile Example
Create a simple Node.js application Dockerfile:
# Use official Node.js image
FROM node:18-alpine
# Set working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
# Copy application code
COPY . .
# Expose port
EXPOSE 3000
# Start application
CMD ["node", "server.js"]Docker Compose
For multi-container applications, use Docker Compose:
# docker-compose.yml
version: "3.8"
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://db:5432/myapp
depends_on:
- db
restart: unless-stopped
db:
image: postgres:15-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=myapp
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=secret
restart: unless-stopped
volumes:
postgres_data:Compose Commands
# Start services
docker compose up -d
# View logs
docker compose logs -f
# Stop services
docker compose down
# Stop and remove volumes
docker compose down -vBest Practices
- Use multi-stage builds to reduce image size
- Don’t run as root inside containers
- Use
.dockerignoreto exclude unnecessary files - Tag images properly with semantic versions
- Scan images for vulnerabilities using
docker scout
💡 Tip: Use
docker system pruneregularly to clean up unused images and containers.
Next: Kubernetes Basics