Введение
Marsh House передаёт A river remembered, River edition 2, на принимающий Engine, изолированный от реестра. Пакет передачи уже существует, но в нём сохранён только веб-образ. Исправьте его, загрузите оба образа на получателе и воспользуйтесь полноценной выставкой после остановки источника.
Эта независимая работа подготавливает собственные источник, файлы и получатель; ничего из предыдущей VM не требуется. Вы должны изучить сборку пакета, связи предоставленного Compose и различие тегов и ID образов в Pack the Exhibition либо иметь эквивалентные знания. Docker и Compose готовы. Вы изучите явные контексты, загрузку на стороне получателя и автономный запуск.
Используйте Workstation, Source Exhibition и Receiving Exhibition. У двух Engine отдельные сокеты, процессы containerd и хранилища образов, но общее ядро этой VM; это контролируемая граница приёма, а не две физические машины или доказательство полного аварийного восстановления. Выделите около 45 минут с учётом чтения и обычных ошибок; это оценка автора.
Изучите границу приёма
На этом шаге вы различите два Engine, прежде чем менять любой из них. Начните в Source Exhibition. Откройте Pocket compass и Crossing ledger, прочитайте записи и скачайте полевые листы. Обратите внимание на River edition 2 на странице коллекции. Receiving Exhibition сейчас сообщает Exhibition not running с HTTP 503: она не заимствует страницу источника.
Переключитесь в Workstation, начиная в /home/labex/project/exhibition-handoff:
cd /home/labex/project/exhibition-handoff
cat release.json
Требуемые теги — field-notes/web:receive и field-notes/api:receive. Подготовленный packet содержит коллекцию и файл Compose с относительными путями, но лишь один образ в images.tar.
Контекст Docker именует соединение с демоном. Следующая команда context create записывает соединение с Unix-сокетом получателя; она не создаёт новый Engine и не меняет активный контекст по умолчанию. unix:// — протокол локального сокета, а оставшийся путь принадлежит только изолированному получателю этого курса:
docker context create receiver --docker host=unix:///opt/labex/dk03/receiver-socket/docker.sock
Если имя уже существует после вашей попытки, изучите его через docker context inspect receiver вместо переключения глобального контекста или создания другого получателя. Используйте --context в каждой операции, чтобы явно указывать её цель.
docker --context default info --format '{{.ID}}'
docker --context receiver info --format '{{.ID}}'
docker --context receiver image ls
ID Engine различаются. У получателя есть базовый образ Python для его отдельного эталонного сервиса receiving-desk, но ни одного требуемого тега выставки. Сохраните этот сервис и сам принимающий Engine в целости.
Принимающий Engine находится внутри учебного контейнера dk03-receiver. Следующие две команды только для чтения запускают инструменты в этом контейнере через исходный Engine. ip route показывает подключённые маршруты без маршрута по умолчанию. wget выполняет настоящий запрос к реестру; -T 5 ограничивает сетевое ожидание, -O /dev/null отбрасывает тело любого ответа. Эта попытка должна завершиться ошибкой с ненулевым кодом, поскольку у принимающего пространства имён нет маршрута к реестру:
docker --context default exec dk03-receiver ip route
docker --context default exec dk03-receiver wget -T 5 -O /dev/null https://registry-1.docker.io/v2/
Прочитайте ошибку подключения. Сбой сетевого подключения отличается от HTTP 404 или 503 приложения. Не добавляйте маршрут, не включайте доступ к реестру и не монтируйте исходный сокет Docker для обхода проблемы: пакет должен полностью обеспечивать передачу.
Исправьте, скопируйте и загрузите пакет
На этом шаге вы перенесёте оба требуемых образа и локальную коллекцию в принимающую папку. Начните в Workstation. В предыдущей работе по упаковке изучались image save, cp и относительные пути Compose. Замените неполный архив точной парой, указанной в записи выпуска этой работы:
docker --context default image save -o packet/images.tar field-notes/web:receive field-notes/api:receive
cat packet/compose.yaml
Убедитесь, что монтирование — ./collection:/collection:ro, а теги сервисов оканчиваются на :receive. Относительный путь будет разрешаться рядом с полученной конфигурацией. Скопируйте полный пакет, а не только архив образов:
cp -r packet /home/labex/project/receiving/packet
ls /home/labex/project/receiving/packet
При первой попытке этого назначения нет. Если повторяете собственное копирование, копируйте содержимое командой cp -r packet/. /home/labex/project/receiving/packet/, а не создавайте вложенный каталог packet. Родительский каталог получателя также содержит desk/, принадлежащий сохраняемому эталонному сервису. Не удаляйте и не перезаписывайте его.
image load -i импортирует конфигурации образов, слои и теги из сохранённого архива в выбранный Engine:
docker --context receiver image load -i /home/labex/project/receiving/packet/images.tar
docker --context receiver image ls
Теперь должны появиться оба требуемых тега. Этот получатель не разделял хранилище образов исходного Engine; одного сохранения тега на источнике недостаточно, чтобы сделать его доступным здесь. Если появился только один тег, вернитесь к release.json, исправьте архив сохранения исходного пакета и повторно скопируйте его содержимое перед новой загрузкой.
Откройте полученную выставку без источника
На этом шаге вы выполните запуск только из файлов принимающей стороны и продемонстрируете независимость. Начните в Workstation. --project-directory задаёт место разрешения относительных файлов Compose, -p exhibition именует только ресурсы приложения этого курса, up -d запускает их в фоне, --pull never запрещает скачивание из реестра, а --no-build запрещает сборку отсутствующих образов:
docker --context receiver compose --project-directory /home/labex/project/receiving/packet -p exhibition up -d --pull never --no-build
docker --context receiver compose --project-directory /home/labex/project/receiving/packet -p exhibition ps
Оба сервиса, gallery и records, должны работать. Если Compose сообщает об отсутствии образа, исправьте и загрузите пакет вместо скачивания. Если страница сообщает Collection unavailable, изучите журналы сервиса записей с тем же префиксом Compose и окончанием logs records, сравните принимающую папку коллекции и её монтирование :ro, затем исправьте пакет и скопируйте заново. Если предыдущая частичная попытка требует замены, используйте тот же префикс с down, затем повторите показанную команду запуска. Это удалит только контейнеры приложения, а не принимающий стенд или его Engine.
Переключитесь в Receiving Exhibition, обновите страницу и изучите четыре предмета, их иллюстрации, подробности и скачивание полевых листов. Это принимающий сервис, а не копия страницы источника.
Переключитесь в Workstation. docker stop запрашивает остановку именованного контейнера. Остановите только эти два исходных сервиса, оставив принимающий Engine и receiving-desk работающими:
docker --context default stop dk03-source-web dk03-source-api
Переключитесь в Source Exhibition и обновите страницу: теперь она должна сообщать Exhibition not running. Переключитесь в Receiving Exhibition, обновите страницу, откройте Pocket compass и Crossing ledger и снова скачайте их полевые листы. У получателя должны сохраниться правильный выпуск, все четыре предмета, каждая иллюстрация и полное скачивание. Его просмотрщик не обращается к источнику при отсутствии данных. Новый сеанс браузера тоже должен работать без ранее кешированных страниц.
Это полученная коллекция River edition 2, всё ещё доступная после остановки источника:

Оставьте полученное приложение работающим. Проверки наблюдают за этим действующим состоянием и сохраняют его; дополнительное изолированное воспроизведение загружает неизменённый пакет в новое хранилище без сети для проверки повторяемости поставки. Ни одна проверка не восполняет за вас файлы или образы, отсутствующие в вашем текущем учебном окружении.
Резюме
Вы использовали явные контексты для обращения к независимым Docker Engine, исправили пакет из двух образов и загрузили его на получателе, изолированном от реестра. Compose запустился с конфигурацией и материалами принимающей стороны при запрещённых скачивании и сборке. Полноценная выставка продолжила работу после остановки обоих исходных сервисов.



