8 вопросов
Docker - контейнеризация приложений. Образы и контейнеры, Dockerfile (multi-stage build, CMD vs ENTRYPOINT), volumes, networking, Docker Compose. Стандартный инструмент для разработки и деплоя.
Docker image - неизменяемый шаблон из слоёв. Контейнер - запущенный экземпляр образа с записываемым слоем. Из одного образа можно создать множество контейнеров. Аналогия: образ - класс, контейнер - объект.
Подробнее →COPY - просто копирует файлы. ADD автоматически распаковывает tar-архивы и может загружать по URL. Best practice: используйте COPY для предсказуемости. ADD нужен только когда требуется распаковка архива.
Подробнее →При удалении контейнера все данные записываемого слоя теряются. Volumes хранят данные на хосте, независимо от контейнера. Используются для БД, логов, конфигов. Типы: named volumes (Docker управляет), bind mounts (конкретный путь).
Подробнее →Docker создаёт встроенный DNS для контейнеров в одной сети. Контейнер postgres доступен по hostname "postgres". В Docker Compose имя сервиса автоматически становится hostname.
Подробнее →Docker Compose описывает все сервисы (web, db, cache, monitoring) в docker-compose.yml. Одна команда docker compose up запускает всё с зависимостями, сетями и volumes. Для production-оркестрации используют Kubernetes.
Подробнее →Multi-stage build использует несколько FROM. Первый этап (build) содержит компилятор и зависимости. Второй (runtime) копирует только бинарник в минимальный образ (alpine, scratch). Go-приложение: сборка ~1 ГБ, финальный ~15 МБ.
Подробнее →ENTRYPOINT задаёт основную команду. CMD - аргументы по умолчанию. docker run myapp arg1 заменит CMD, но не ENTRYPOINT. Пример: ENTRYPOINT ["./app"], CMD ["--port", "80"]. docker run myapp --port 3000 перезапишет только CMD.
Подробнее →Docker кеширует слои последовательно. Если слой изменился - все последующие пересобираются. Копируя go.mod/go.sum первыми и запуская go mod download, вы кешируете зависимости. Код меняется чаще зависимостей, поэтому копируется позже.
Подробнее →