Установка Docker
Windows
Скачайте Docker Desktop с

Docker Desktop: The #1 Containerization Tool for Developers | Docker
Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.
https://www.docker.com/products/docker-desktop
macOS
brew install --cask docker
Linux
sudo apt update
sudo apt install docker.io docker-compose-plugin
sudo usermod -aG docker $USER
Перелогиньтесь для применения групп.
Проверка
docker --version
docker compose version
Базовый docker-compose.yml
Создайте файл docker-compose.yml в корне проекта:
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- NODE_ENV=development
- DB_HOST=db
- DB_PORT=5432
- DB_NAME=myapp
- DB_USER=admin
- DB_PASS=secret
depends_on:
- db
- redis
db:
image: postgres:16-alpine
ports:
- "5432:5432"
environment:
- POSTGRES_DB=myapp
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=secret
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
pgdata:
Запуск и управление
docker compose up -d
docker compose logs -f app
docker compose ps
docker compose down
docker compose down -v
docker compose build
docker compose up -d --build
Флаг -d — detached mode (в фоне). down -v удалит и volumes (данные PostgreSQL!).
Бинд-маунт для разработки
volumes:
- .:/app
- /app/node_modules
Строка /app/node_modules без пути слева создаёт анонимный volume, предотвращая перезапись зависимостей.
Named volume для данных
volumes:
- pgdata:/var/lib/postgresql/data
Named volumes сохраняются между перезапусками.
Переменные окружения через .env
Создайте .env в корне проекта:
DB_USER=admin
DB_PASS=secret
DB_NAME=myapp
В docker-compose.yml:
services:
db:
image: postgres:16-alpine
env_file:
- .env
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASS}
- POSTGRES_DB=${DB_NAME}
Не коммитьте .env в Git.
Зависимости с healthcheck
services:
app:
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin"]
interval: 5s
timeout: 5s
retries: 5
Полезные команды
docker compose exec app bash
docker compose exec db psql -U admin myapp
docker compose restart app
docker image prune -a
Разработка с hot-reload
Для Node.js добавьте в package.json:
"scripts": {
"dev": "nodemon --watch . --ext js,json server.js"
}
Запускайте npm run dev в контейнере.
Комментарии (0)