Урок 03. Dockerfile, nginx и БД в Docker
⚡ Кратко: Dockerfile, nginx и БД в Docker
Dockerfile — текстовый файл с инструкциями сборки образа. Docker выполняет их сверху вниз, каждая создаёт новый слой (который кешируется). Правильный порядок слоёв — ключ к быстрой пересборке.
- FROM — базовый образ; RUN — команда при сборке; COPY — копировать файлы; WORKDIR — рабочая директория
- EXPOSE — документировать порт; ENV — переменная окружения; CMD — команда при старте (можно переопределить); ENTRYPOINT — точка входа (нельзя переопределить без --entrypoint)
- Сборка:
docker build -t my-image:1.0 . - nginx со статикой:
FROM nginx:alpine+COPY ./html /usr/share/nginx/html - БД в Docker: всегда монтируй volume для данных и передавай пароль через
-e, никогда не хардкоди в Dockerfile
Топ-3 ошибки: 1) Копировать зависимости после кода — кеш слоёв будет сбрасываться при любом изменении кода. 2) Запускать контейнер БД без volume — данные исчезнут при удалении контейнера. 3) Писать пароль в Dockerfile — попадёт в историю образа, опасно.
📖 О чём этот урок
До этого момента мы запускали готовые образы из Docker Hub. Теперь научимся создавать собственные образы с помощью Dockerfile — и разворачивать внутри них реальные сервисы: веб-сервер nginx со статическим контентом и базу данных с постоянным хранилищем.
Это фундаментальный навык: любое продакшн-приложение имеет свой Dockerfile, и умение писать его правильно напрямую влияет на размер образа, скорость сборки и безопасность.
Что изучим
- Что такое Dockerfile и как Docker обрабатывает его инструкции
- Все ключевые инструкции: FROM, RUN, COPY, WORKDIR, EXPOSE, ENV, ARG, CMD, ENTRYPOINT, USER, VOLUME
- Слои образа и механизм кеширования — как ускорить пересборку
- Оптимизация: минимизация слоёв, очистка временных файлов, .dockerignore
- Практика: nginx со своей статической страницей
- Persistence Layer в Docker: тома (Volumes) и Bind Mounts
- Запуск базы данных (MySQL / PostgreSQL) с volume для данных
📚 Что повторить перед изучением
- ← Урок 02: Операции с контейнерами — docker run, флаги -d, -p, -e, -v, docker exec
- Основы терминала: создание файлов, работа с директориями, переменные окружения
- Понятие порта и HTTP-запроса: что значит «пробросить порт 8080:80»
🎯 Что изучать дальше
- → Урок 04: Multistage Dockerfile и Docker Compose
- Многоэтапные сборки — как уменьшить образ в 10 раз
- Docker Compose — как связать несколько контейнеров (nginx + app + db) в одну команду