Docker контейнеры для разработки
Готовые Docker контейнеры для быстрого развертывания среды разработки.
Node.js разработка
Dockerfile для Node.js приложения
# Dockerfile
FROM node:18-alpine
WORKDIR /app
# Копирование package.json и lock файлов
COPY package*.json ./
COPY bun.lockb ./
# Установка зависимостей
RUN npm install -g bun
RUN bun install
# Копирование исходного кода
COPY . .
# Сборка приложения
RUN bun run build
EXPOSE 3000
# Запуск в production режиме
CMD ["bun", "start"]
Docker Compose для Node.js + MongoDB
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=development
- MONGODB_URI=mongodb://mongo:27017/devdb
volumes:
- .:/app
- /app/node_modules
depends_on:
- mongo
mongo:
image: mongo:7
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
mongo-express:
image: mongo-express
ports:
- "8081:8081"
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=password
- ME_CONFIG_MONGODB_SERVER=mongo
depends_on:
- mongo
volumes:
mongo_data:
Python разработка
Dockerfile для Python приложения
# Dockerfile
FROM python:3.11-slim
WORKDIR /app
# Установка системных зависимостей
RUN apt-get update && apt-get install -y \
gcc \
g++ \
&& rm -rf /var/lib/apt/lists/*
# Копирование requirements
COPY requirements.txt .
# Установка Python зависимостей
RUN pip install --no-cache-dir -r requirements.txt
# Копирование исходного кода
COPY . .
EXPOSE 8000
# Запуск приложения
CMD ["python", "app.py"]
Docker Compose для Django + PostgreSQL
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
environment:
- DEBUG=1
- DATABASE_URL=postgresql://postgres:password@db:5432/django_db
depends_on:
- db
- redis
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=django_db
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
redis:
image: redis:7-alpine
ports:
- "6379:6379"
celery:
build: .
command: celery -A myproject worker -l info
volumes:
- .:/app
environment:
- DATABASE_URL=postgresql://postgres:password@db:5432/django_db
- CELERY_BROKER_URL=redis://redis:6379/0
depends_on:
- db
- redis
volumes:
postgres_data:
PHP разработка
Dockerfile для PHP приложения
# Dockerfile
FROM php:8.2-fpm-alpine
# Установка системных зависимостей
RUN apk add --no-cache \
freetype-dev \
libjpeg-turbo-dev \
libpng-dev \
libzip-dev \
zip \
unzip
# Установка PHP расширений
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install pdo pdo_mysql zip
# Установка Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
# Копирование composer файлов
COPY composer.json composer.lock ./
# Установка зависимостей
RUN composer install --no-dev --optimize-autoloader
# Копирование исходного кода
COPY . .
# Настройка прав доступа
RUN chown -R www-data:www-data /var/www/html
EXPOSE 9000
CMD ["php-fpm"]
Laravel с Docker Compose
version: '3.8'
services:
app:
build: .
volumes:
- .:/var/www/html
depends_on:
- mysql
- redis
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- .:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: password
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
redis:
image: redis:7-alpine
ports:
- "6379:6379"
mailhog:
image: mailhog/mailhog
ports:
- "1025:1025"
- "8025:8025"
volumes:
mysql_data:
Go разработка
Dockerfile для Go приложения
# Многоэтапная сборка
FROM golang:1.21-alpine AS builder
WORKDIR /app
# Копирование go mod файлов
COPY go.mod go.sum ./
# Загрузка зависимостей
RUN go mod download
# Копирование исходного кода
COPY . .
# Сборка приложения
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
# Финальный образ
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
# Копирование бинарного файла
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]
Go с PostgreSQL
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
environment:
- DB_HOST=postgres
- DB_PORT=5432
- DB_USER=gouser
- DB_PASSWORD=gopass
- DB_NAME=godb
depends_on:
- postgres
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: godb
POSTGRES_USER: gouser
POSTGRES_PASSWORD: gopass
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
postgres_data:
Общие настройки разработки
.dockerignore
node_modules
npm-debug.log
.git
.gitignore
README.md
.env
.nyc_output
coverage
.coverage
__pycache__
*.pyc
*.pyo
*.pyd
.Python
env
pip-log.txt
pip-delete-this-directory.txt
.tox
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.log
.idea
.vscode
.mypy_cache
.pytest_cache
.hypothesis
Makefile для Docker команд
# Makefile
.PHONY: build up down logs shell test
build:
docker-compose build
up:
docker-compose up -d
down:
docker-compose down
logs:
docker-compose logs -f
shell:
docker-compose exec app /bin/sh
test:
docker-compose exec app npm test
clean:
docker-compose down -v
docker system prune -f
Скрипт для быстрого запуска
#!/bin/bash
# dev-start.sh
echo "Запуск среды разработки..."
# Проверка наличия Docker
if ! command -v docker &> /dev/null; then
echo "Docker не установлен!"
exit 1
fi
# Сборка и запуск контейнеров
docker-compose build
docker-compose up -d
echo "Ожидание запуска сервисов..."
sleep 10
# Проверка статуса
docker-compose ps
echo "Среда разработки готова!"
echo "Приложение: http://localhost:3000"
echo "База данных: localhost:5432"
Совет
Используйте bind mount тома для синхронизации кода во время разработки и именованные тома для production данных.
Производительность
На Windows Docker Desktop может работать медленно. Рассмотрите использование WSL2 для лучшей производительности.