Skip to main content

containerization

Application containerization with Docker

Source facts

Repository
ffsshhttiikk/opencode-agents-skills
Last source activity
February 28, 2026 at 22:48
Detected SKILL.md language
English
Stars
3
Forks
2

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
containerization
description
Application containerization with Docker
license
MIT
compatibility
opencode
metadata
{"audience":"developer, devops-engineer","category":"devops"}
## What I do - Containerize applications using Docker and containerd - Optimize Docker images for size and security - Configure multi-stage builds for efficient deployments - Set up private container registries - Implement container security scanning - Build containerized development workflows ## When to use me - When packaging applications for deployment - When creating consistent development environments - When migrating applications to Kubernetes - When optimizing application delivery - When implementing microservices - When building CI/CD pipelines ## Key Concepts ### Dockerfile Best Practices ```dockerfile # Multi-stage build for Go application # Build stage FROM golang:1.21-alpine AS builder WORKDIR /app # Install dependencies first for better caching COPY go.mod go.sum ./ RUN go mod download # Copy source code COPY . . # Build binary RUN CGO_ENABLED=0 GOOS=linux go build \ -a -installsuffix cgo \ -o main . # Production stage FROM alpine:3.18 # Install certificates RUN apk --no-cache add ca-certificates # Create non-root user RUN adduser -D -u 1000 appuser WORKDIR /app # Copy binary from builder COPY --from=builder /app/main . # Switch to non-root user USER appuser EXPOSE 8080 CMD ["./main"] ``` ### Docker Compose ```yaml version: '3.8' services: app: build: context: . dockerfile: Dockerfile ports: - "8080:8080" environment: - DATABASE_URL=postgres://db:5432/app - REDIS_URL=redis://cache:6379 depends_on: db: condition: service_healthy cache: condition: service_started networks: - backend deploy: resources: limits: cpus: '0.5' memory: 512M db: image: postgres:15-alpine volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_DB: app POSTGRES_USER: user POSTGRES_PASSWORD: password healthcheck: test: ["CMD-SHELL", "pg_isready -U user -d app"] interval: 5s timeout: 5s retries: 5 networks: - backend cache: image: redis:7-alpine networks: - backend volumes: postgres_data: networks: backend: driver: bridge ``` ### Image Optimization ```dockerfile # Use specific tags, not latest FROM node:20-alpine # Use .dockerignore # node_modules # .git # *.md # tests/ # Combine RUN commands RUN apk add --no-cache \ && rm -rf /var/cache/apk/* # Don't run as root USER node # Use COPY, not ADD (unless extracting archives) COPY --chown=node:node package*.json ./ RUN npm ci --only=production # Health check HEALTHCHECK --interval=30s --timeout=3s \ CMD wget --quiet --tries=1 --spider http://localhost:3000/health || exit 1 ``` ### Security Scanning ```bash # Scan for vulnerabilities trivy image myapp:latest # Scan with severity filter trivy image --severity HIGH,CRITICAL myapp:latest # Scan in CI/CD docker scout cves myapp:latest # Sysbox for secure containers docker run --runtime=sysbox-runc myapp:latest ``` ### Registry Configuration ```yaml # Docker config for private registry { "auths": { "registry.example.com": { "username": "deploy", "password": "${REGISTRY_PASSWORD}" } }, "experimental": "disabled", "debug": "false" } ```
View on GitHub