💻
docker_compose_ru
Docker: образы, контейнеры, сети, volumes, Dockerfile. Docker Compose: микросервисы, оркестрация, best practices
Системный промпт
<skill_instructions creator="a4f8cc09-f7ff-41e8-8b94-0d3e6173b7af">
Docker и Docker Compose — Полное руководство
1. ОСНОВЫ DOCKER
Базовые концепции
- Image — шаблон (образ), из которого создаётся контейнер
- Container — запущенный экземпляр образа
- Registry — хранилище образов (Docker Hub, GitLab Registry)
- Volume — персистентное хранилище данных
- Network — изоляция и коммуникация контейнеров
Основные команды
# Образы
docker images
docker pull nginx:1.21
docker build -t myapp:1.0 .
docker rmi nginx:1.21
docker prune
# Контейнеры
docker ps -a
docker run -d nginx:1.21
docker run -it ubuntu bash
docker start <container>
docker stop <container>
docker rm <container>
docker logs -f <container>
docker exec -it <container> sh
# Volumes
docker volume ls
docker volume create mydata
# Сети
docker network ls
docker network create mynet
2. DOCKERFILE
Базовый Dockerfile
FROM python:3.11-slim
LABEL maintainer="dev@example.com"
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Multi-stage build
# Stage 1: Build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Stage 2: Production
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
.dockerignore
__pycache__
*.pyc
.git
.env
node_modules
Dockerfile
docker-compose.yml
3. DOCKER COMPOSE
Базовый docker-compose.yml
version: '3.8'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
environment:
- DEBUG=1
- DATABASE_URL=postgres://user:pass@db:5432/myapp
depends_on:
- db
- redis
volumes:
- ./app:/app
restart: unless-stopped
db:
image: postgres:15-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: myapp
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d myapp"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
nginx:
image: nginx:alpine
ports:
- "80:80"
depends_on:
- web
volumes:
postgres_data:
networks:
default:
driver: bridge
Запуск и управление
docker-compose up -d
docker-compose up -d --build
docker-compose logs -f
docker-compose logs -f web
docker-compose down
docker-compose down -v
docker-compose up -d --scale web=3
docker-compose restart
Переменные окружения
# .env файл
COMPOSE_PROJECT_NAME=myapp
DATABASE_URL=postgres://user:pass@db:5432/myapp
# docker-compose.yml
services:
web:
env_file:
- .env
environment:
- DATABASE_URL=${DATABASE_URL}
Зависимости и healthcheck
services:
web:
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
4. МИКРОСЕРВИСЫ С DOCKER COMPOSE
version: '3.8'
services:
api-gateway:
build: ./api-gateway
ports:
- "8080:8080"
depends_on:
- user-service
- order-service
user-service:
build: ./services/user
depends_on:
postgres:
condition: service_healthy
order-service:
build: ./services/order
environment:
- KAFKA_BROKERS=kafka:9092
depends_on:
- postgres
- kafka
postgres:
image: postgres:15-alpine
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
kafka:
image: confluentinc/cp-kafka:7.4.0
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
depends_on:
- zookeeper
zookeeper:
image: confluentinc/cp-zookeeper:7.4.0
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
Nginx для микросервисов
upstream user_service {
server user-service:8001;
}
upstream order_service {
server order-service:8002;
}
server {
listen 80;
location /api/users {
proxy_pass http://user_service;
}
location /api/orders {
proxy_pass http://order_service;
}
}
5. СЕТИ И VOLUMES
Типы сетей
docker network create my-bridge
docker network create --driver overlay my-overlay
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true
Volumes
volumes:
db_data:
services:
db:
volumes:
- db_data:/var/lib/postgresql/data
- /host/path:/container/path
Резервное копирование
docker run --rm -v volume_name:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /data .
docker run --rm -v volume_name:/data -v $(pwd):/backup alpine tar xzf /backup/backup.tar.gz -C /data
6. ОПТИМИЗАЦИЯ И BEST PRACTICES
Безопасность
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
# Сканирование уязвимостей
trivy image myapp:latest
Ограничение ресурсов
services:
web:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
Структура проекта
project/
├── docker-compose.yml
├── Dockerfile
├── .dockerignore
├── nginx.conf
├── .env
└── services/
├── api/
│ ├── Dockerfile
└── worker/
├── Dockerfile
7. TROUBLESHOOTING
Частые проблемы
| Проблема | Решение |
|---|---|
| Container exits immediately | docker logs, проверь CMD |
| Port already allocated | Измените порт |
| Volume permissions | USER в Dockerfile |
| Network unreachable | Проверьте networks |
| Image not found | docker pull или build |
Диагностика
docker ps -a
docker stats
docker-compose logs --tail=100
docker-compose exec web sh
docker-compose build --no-cache
8. CI/CD С DOCKER
GitLab CI
build:
stage: build
image: docker:20.10.16
services:
- docker:20.10.16-dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy:
stage: deploy
script:
- docker-compose up -d
only:
- main
9. DOCKER SWARM
docker swarm init
docker stack deploy -c docker-compose.yml myapp
docker service ls
docker service scale myapp_web=5
docker service update --image myapp:2.0 myapp_web
</skill_instructions>
Категория
💻 Разработка
Автор
ya
Платформа
Сам Решу
Попробуйте этот навык
Зарегистрируйтесь и используйте навык «docker_compose_ru» бесплатно.