65 phút
Docker Containerization
Giới thiệu Docker
Docker là platform để phát triển, vận chuyển và chạy ứng dụng trong containers.
Docker Basics
Dockerfile
# Base image
FROM node:18-alpine
# Set working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
# Copy source code
COPY . .
# Expose port
EXPOSE 3000
# Start application
CMD ["node", "server.js"]
Build Docker Image
# Build image
docker build -t my-app:1.0 .
# List images
docker images
# Run container
docker run -d -p 3000:3000 --name my-app-container my-app:1.0
Docker Commands
Container Management
# List running containers
docker ps
# List all containers
docker ps -a
# Stop container
docker stop my-app-container
# Remove container
docker rm my-app-container
# View logs
docker logs my-app-container
Image Management
# Remove image
docker rmi my-app:1.0
# Pull image from registry
docker pull nginx:latest
# Tag image
docker tag my-app:1.0 my-registry.com/my-app:1.0
# Push to registry
docker push my-registry.com/my-app:1.0
Docker Compose
docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
depends_on:
- db
volumes:
- ./logs:/app/logs
db:
image: postgres:13
environment:
- POSTGRES_DB=mydb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
postgres_data:
Docker Compose Commands
# Start services
docker-compose up -d
# Stop services
docker-compose down
# View logs
docker-compose logs -f
# Scale services
docker-compose up -d --scale app=3
Multi-stage Builds
# Build stage
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production stage
FROM node:18-alpine AS production
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/server.js"]
Best Practices
Security
# Use non-root user
FROM node:18-alpine
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
USER nextjs
# Use .dockerignore
# node_modules
# npm-debug.log
# .env
# .git
Optimization
# Use specific version tags
FROM node:18-alpine
# Leverage build cache
COPY package*.json ./
RUN npm ci
# Copy source code after dependencies
COPY . .
# Use multi-stage builds
# Minimize layer size
Bài tập thực hành
Hãy dockerize một ứng dụng Node.js đơn giản!