Docker
Раздел про Docker для бэкендера простыми словами: контейнеры и образы, Dockerfile для Spring Boot, multi-stage сборка, запуск контейнеров, тома и сети, Docker Compose, JVM в контейнере, безопасные образы и реестры.
Раздел с нуля про Docker для backend-разработчика: что такое контейнеры и образы, как упаковать Spring Boot приложение, как уменьшить образ, поднять окружение из нескольких сервисов через Docker Compose, не потерять данные и не наступить на грабли с памятью JVM. Читать лучше по порядку.
- Что такое Docker и контейнеры — Разбираем, что такое контейнер и образ, чем Docker отличается от виртуальной машины и зачем это нужно каждому бэкендеру
- Образы, слои и Dockerfile: как Docker упаковывает приложение — Разбираем, что такое образ Docker, из каких слоёв он состоит и как писать Dockerfile — на примере Spring Boot приложения с объяснением каждой инструкции.
- Dockerfile для Spring Boot: правильная сборка образа — Как написать Dockerfile для Spring Boot приложения: базовый JRE-образ, кэш зависимостей, передача профилей, layered jars и типичные ошибки при контейнеризации.
- Multi-stage сборка и кэш слоёв Docker — Как уменьшить образ Spring Boot-приложения с помощью multi-stage сборки, порядка инструкций и кэша слоёв — меньше размер, быстрее CI.
- Запуск контейнеров: docker run и жизненный цикл — Как запустить контейнер, пробросить порты и переменные окружения, посмотреть логи и зайти внутрь — разбираем docker run и основные команды управления.
- Тома и данные в Docker: как не потерять базу при перезапуске контейнера — Разбираем, почему данные в контейнере исчезают при его удалении, и как использовать тома и bind mounts, чтобы сохранять их между перезапусками.
- Сети Docker: как контейнеры общаются между собой — Разбираем, как Docker изолирует сетевое окружение контейнеров, как связать несколько контейнеров и почему localhost здесь не работает.
- Docker Compose: поднять всё окружение одной командой — Разбираем Docker Compose с нуля: структура docker-compose.yml, связь сервисов по именам, healthcheck, зависимости и пример со Spring Boot и Postgres.
- JVM в контейнере: память и ядра — Почему JVM раньше «не видела» лимиты контейнера, как исправить настройку памяти и ядер, что такое OOMKilled и как его избежать.
- Маленькие и безопасные образы Docker — Как уменьшить размер образа, не положить секреты в слои, запустить приложение от непривилегированного пользователя и проверить образ на уязвимости.
- Реестры образов и сборка в CI — Что такое реестр образов, как публиковать и скачивать образы, выбирать теги и автоматизировать сборку в CI — от docker push до готового конвейера