deшка
Урок 5.10

Проверка понимания: собираем окружение

Три задачи на совместную работу образов, сети, настроек и хранения.

Для обработки файла нужны программа, вход, место для результата и настройки подключения к другим службам. Docker позволяет собрать это окружение из независимых частей. Перед запуском полезно записать, какой объект за что отвечает.

Например, база постоянно работает в отдельном контейнере и пишет в именованный том. Короткая задача получает CSV через bind mount только для чтения, завершает расчёт и сохраняет результат отдельно от своего слоя. При обновлении программы образ заменяют; нужные входы и тома подключают снова.

Проверьте путь данных

Для контейнера базы определите внутренний порт и публикацию на хосте. Для соседнего приложения используйте имя базы в общей сети. Для входного файла сопоставьте каталог компьютера и путь контейнера. Для результата выберите срок хранения: достаточно вывода в журнал или нужен файл, который переживёт удаление процесса.

В следующем опыте условная задача просто копирует маленький CSV. Это позволяет проверить подключения, не добавляя новый алгоритм обработки. На её место позднее можно поставить Python-программу, используя тот же способ доставки файлов и конфигурации.

Три самостоятельных шага

Сначала подготовьте базу с сетью и томом. Затем запустите конечную задачу с входным файлом и настройкой DB_HOST. В этом опыте программа не выполняет SQL: проверяется адрес, переданный в окружение. Наконец, сохраните файл в отдельном томе и подключите его к новому читателю.

После запуска сверяйте состояние через docker ps -a, настройки через inspect, файлы через exec ... cat. Завершённая задача и работающая база — ожидаемое сочетание для такой обработки.

Попробуйте в учебном терминале

В /home/de/exam-input/source.csv лежит маленький CSV. Остальные ресурсы создайте самостоятельно по условиям трёх заданий. Объекты предыдущих уроков сюда не переносятся.

Здесь команды Docker имитируются: терминал хранит учебное состояние образов, контейнеров и файлов. Реальные службы и внешнюю сеть он не запускает.

учебный терминалзадания 0 / 3
Введите команду. Подсказка: help покажет, что умеет этот терминал.
de@deshka:~$
ЗАДАНИЯ
  1. 1. Создайте exam-net и exam-data; запустите exam-db из postgres:17 в этой сети с учебным паролем, томом в /var/lib/postgresql/data и портом 15440:5432.
  2. 2. Запустите конечный exam-job из alpine:3.21 в exam-net с DB_HOST=exam-db. Подключите exam-input к /input readonly и скопируйте source.csv в /tmp/result.csv контейнера.
  3. 3. Сохраните source.csv из exam-input в result.csv тома exam-output через одноразовый контейнер. Подключите том к работающему result-reader в /result readonly.
решённые задания сохранятся в прогресс после входа

Разберите ситуации

Двенадцать вопросов проверяют выбор команды и судьбу данных. У каждого ответа есть отдельное объяснение. Практические задания и эта самопроверка дополняют друг друга.

1. Образ скачан через docker pull. Что уже произошло?
2. Файл записан в слой контейнера без mount. Что произойдёт после stop и start того же экземпляра?
3. Контейнер базы удалили, затем подключили тот же именованный том к новому. Что ожидается?
4. Python в соседнем сервисе Compose должен подключиться к db. Какой адрес нужен в нашей лаборатории?
5. После pull новой сборки сделали restart старого контейнера. Обновился ли его образ?
6. CSV подключён bind mount. Изменились данные, но не код. Нужно ли заново build?
7. Чем RUN отличается от CMD в Dockerfile?
8. Python-скрипт напечатал результат и получил Exited (0). Это обязательно ошибка?
9. Что проверяет pg_isready в нашей Compose-лаборатории?
10. В YAML изменили POSTGRES_PASSWORD, но оставили старый том. Почему старый пароль может продолжать действовать?
11. В docker version есть Client, но Server недоступен. Что проверять сначала?
12. Контейнер завершён с кодом 137. Что можно уверенно сказать?
Войти, чтобы отмечатьдальше →
5.11 →Kubernetes: управление приложениями в кластере