Перейти к основному содержимому

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 для лучшей производительности.