Docker для бэкенда
«У меня работает!» — и у всех остальных сломается. Docker упаковывает приложение со всеми зависимостями в контейнер: одинаково запускается на ноутбуке, сервере и в CI.
Образы и контейнеры
Образ — готовый «слепок» приложения с зависимостями. Контейнер — запущенный изолированный процесс из этого образа. Сам образ собирается из инструкций Dockerfile.
# Dockerfile (для Node.js-сервера)
FROM node:20-alpine # базовый образ с Node
WORKDIR /app # рабочая папка
COPY package*.json ./ # копируем манифест
RUN npm ci # ставим зависимости
COPY . . # копируем код проекта
EXPOSE 3000 # сообщаем порт
CMD ["node", "server.js"] # команда запуска
docker build -t my-server . # собрать образ
docker run -p 3000:3000 my-server # запустить контейнер
ℹ️
Порядок в Dockerfile важен: слои кэшируются. Сначала зависимости (меняются редко — кэш работает), только потом код (меняется часто). Так пересборка занимает секунды, а не минуты.
.dockerignore
Как .gitignore, только для сборки: не тащим в образ node_modules и мусор.
node_modules
dist
.git
*.log
docker compose: несколько контейнеров
Сервер + база данных = два контейнера. docker compose запускает их вместе одной командой.
# docker-compose.yml
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
docker compose up -d # поднять всё в фоне
docker compose logs -f app # смотреть логи приложения
docker compose down # остановить и удалить
⚠️
Пароли в compose — только в учебных целях. В реальности секреты берут из переменных окружения (
env / ${VAR}) и секретов-хранилищ, но никогда не коммитят в Git.Зачем это вам
- один и тот же запуск на всех машинах — конец истории «у меня работало»;
- быстрый локальный старт окружения с зависимостями (базы, redis);
- знакомство с DevOps открывает дорогу в продакшен-инженерию и DevOps-вакансии.
💡
Попрактикуйтесь на своём Express-сервере из урока 21: оберните его в Dockerfile и поднимите базой через compose. Час практики — и термин «контейнеризация» перестанет пугать.