Docker Basics
A beginner-friendly guide to Docker containerization.
What is Docker?
Docker packages your application and its dependencies into a container - a lightweight, standalone, executable unit that runs consistently across any environment.
Key Concepts
- Image: A blueprint for a container (like a class)
- Container: A running instance of an image (like an object)
- Dockerfile: Instructions to build an image
- Docker Compose: Tool for defining multi-container apps
Getting Started
Install Docker
Download Docker Desktop from docker.com.
# Verify installation
docker --version
docker compose version
Your First Dockerfile
Create a Dockerfile in your project:
# Use Node.js base image
FROM node:20-alpine
# Set working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy source code
COPY . .
# Expose port
EXPOSE 3000
# Start the application
CMD ["npm", "start"]
Build and Run
# Build the image
docker build -t my-app .
# Run the container
docker run -p 3000:3000 my-app
Visit http://localhost:3000 to see your app!
Docker Compose
For multi-service applications, use docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_DB: mydb
POSTGRES_PASSWORD: secret
ports:
- "5432:5432"
# Start all services
docker compose up -d
# Stop all services
docker compose down
# View logs
docker compose logs -f
Essential Commands
# Images
docker images # List images
docker pull image:tag # Download an image
docker rmi image:tag # Remove an image
# Containers
docker ps # List running containers
docker ps -a # List all containers
docker stop container_id # Stop a container
docker rm container_id # Remove a container
# Debugging
docker logs container_id # View container logs
docker exec -it id bash # Shell into container
Best Practices
- Use .dockerignore to exclude unnecessary files
- Multi-stage builds for smaller images
- Don't run as root in containers
- Use specific image tags (not
latest) - Layer caching - put rarely changing steps first