Восемь вопросов на образы, сети, тома, Dockerfile и compose. Можно перепроходить.
Это короткий квиз по всему, что прошли в треке docker-basics.
Чтобы засчитать урок, ответь правильно на все восемь вопросов. Если
ошиблись, ничего страшного: появится кнопка «Пройти заново», можно
перепроходить сколько угодно раз. Прогресс сохраняется, только если квиз
пройден полностью.
После этого квиза трек считается закрытым. Можно идти дальше, к k8s
или к другим темам.
Квиз · закрепить тему
Проверь, что запомнил
01 Чем контейнер отличается от виртуальной машины?
Контейнер — это процесс на ядре хоста, которому ядро врёт через namespaces. У VM полноценная гостевая ОС со своим ядром и гипервизором.
02 Что НЕ относится к Linux-namespaces, через которые изолируется контейнер?
Изоляция процессов, сети, файловой системы, hostname и IPC — это namespaces. Память ограничивается через cgroups, а не namespaces.
03 Из одного образа nginx:1.27 запустили 3 контейнера. Сколько раз слои образа лежат на диске?
Слои read-only и общие. Каждый контейнер получает только свой writable-слой поверх. Это та самая copy-on-write экономия.
04 Какой паттерн COPY в Dockerfile лучше использует кеш сборки?
Кеш слоёв ломается на первой изменённой инструкции. Манифесты зависимостей меняются редко, их ставят выше. Код меняется часто, поэтому он идёт ниже. Так `RUN npm ci` остаётся в кеше, пока package.json не трогали.
05 Зачем нужен multi-stage build?
Builder-стадия собирает (с dev-зависимостями, компилятором, исходниками), runtime-стадия копирует только результат. Образ выходит в разы меньше.
06 После docker rm db пропали данные postgres. Какой тип маунта надо было использовать?
Writable-слой эфемерный, `docker rm` его сносит вместе со всеми изменениями. Named volume лежит отдельно от контейнера и переживает `rm`. Это дефолт для БД.
07 Два контейнера запущены через docker run без флагов сети. Почему ping <имя> между ними не работает?
На дефолтном bridge DNS нет, ходить можно только по IP. DNS-резолвер `127.0.0.11` появляется только в user-defined bridge (его создаёт `docker network create` или compose).
08 В compose api пытается подключиться к базе и получает ECONNREFUSED 127.0.0.1:5432. Что не так?
Классическая ловушка. `localhost` внутри контейнера — это сам контейнер. До базы в compose ходят по имени сервиса: `DB_HOST=db`.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут.
Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства.
Мой прогресс
Отметка сохранена только в этом браузере.
Войди,
и прогресс переедет в аккаунт: он будет виден с телефона и не потеряется.