Docker for Developers: Containers from Zero

TELEGRAM
0/5 Votos: 0
Reportar esta app

Descripción

The Problem Docker Solves

“It works on my machine.” Every developer has said this. Docker eliminates it by packaging your app with everything it needs to run—making development, testing, and production identical.

Docker Core Concepts

  • Image: Blueprint for containers (like a class in OOP)
  • Container: Running instance of an image (like an object)
  • Dockerfile: Instructions to build an image
  • Registry: Where images are stored (Docker Hub)

Your First Container

# Pull and run nginx
docker run -d -p 8080:80 --name my-nginx nginx

# Visit http://localhost:8080
# Stop the container
docker stop my-nginx

# Remove it
docker rm my-nginx

Writing a Dockerfile

# Python Flask app
FROM python:3.11-slim

WORKDIR /app

# Copy requirements first (layer caching)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy app code
COPY . .

EXPOSE 5000

CMD ["python", "app.py"]
# Build the image
docker build -t my-flask-app .

# Run it
docker run -d -p 5000:5000 my-flask-app

Docker Compose for Multi-Container Apps

version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - db
    environment:
      DATABASE_URL: postgresql://user:pass@db:5432/mydb
  
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:
# Start all services
docker compose up -d

# View logs
docker compose logs -f

# Stop everything
docker compose down

Essential Commands Cheat Sheet

docker images          # List images
docker ps              # List running containers
docker ps -a           # All containers
docker logs <name>     # View container logs
docker exec -it <name> bash  # Shell into container
docker system prune    # Clean up unused resources

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *