👋 Hello Docker
# Check Docker version
docker --version
# Run a simple container
docker run hello-world
💡 Tip: Use docker run
to quickly test images and verify installation.
🖼 Docker Images
# List local images
docker images
# Pull an image from Docker Hub
docker pull nginx:latest
# Build a Docker image from Dockerfile
docker build -t myapp:1.0 .
💡 Tip: Tag your images properly for versioning and deployment.
📦 Docker Containers
# List running containers
docker ps
# List all containers
docker ps -a
# Run a container in detached mode
docker run -d --name webserver -p 8080:80 nginx
# Stop and remove container
docker stop webserver
docker rm webserver
💡 Tip: Use -d
for detached containers and -p host:container
for port mapping.
💾 Volumes & Data
# Create a volume
docker volume create mydata
# List volumes
docker volume ls
# Run container with volume
docker run -d -v mydata:/data nginx
💡 Tip: Use volumes to persist data even if containers are deleted.
🌐 Networks
# List networks
docker network ls
# Create a network
docker network create mynetwork
# Connect a container to a network
docker network connect mynetwork mycontainer
💡 Tip: Use custom networks for multi-container apps for better isolation and communication.
⚙️ Dockerfile Basics
# Example Dockerfile
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
💡 Tip: Use small base images and proper caching to speed up builds.
🧩 Docker Compose
# docker-compose.yml example
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: root
💡 Tip: Use docker-compose up -d
to run multi-container apps in detached mode.
📜 Useful Docker Commands
# Remove all stopped containers
docker container prune
# Remove unused images
docker image prune -a
# Show container logs
docker logs mycontainer
# Attach to container
docker exec -it mycontainer /bin/bash
💡 Tip: Clean up unused resources regularly to save disk space.
💡 Tips & Best Practices
- Use .dockerignore to exclude unnecessary files
- Prefer lightweight base images (alpine)
- Tag images with versions, not just 'latest'
- Keep containers stateless; use volumes for data
- Regularly update images for security