소개
Marsh House는 레지스트리에 접근할 수 없는 수신 Engine에 A river remembered, River edition 2를 전달하려고 합니다. 인계 패킷은 이미 있지만 웹 이미지만 저장되어 있습니다. 이를 수정하고 수신 측에 두 이미지를 로드한 뒤 소스를 중지한 상태에서 전체 전시를 사용하세요.
이 독립 실습은 자체 소스, 파일, 수신 환경을 준비하므로 이전 VM의 자료가 필요하지 않습니다. Pack the Exhibition에서 패킷 구성, 제공된 Compose 관계, 이미지 태그와 ID의 차이를 배웠거나 동등한 지식이 있어야 합니다. Docker와 Compose가 준비되어 있습니다. 명시적인 컨텍스트, 수신 측 로드, 오프라인 시작을 배우게 됩니다.
Workstation, Source Exhibition, Receiving Exhibition을 사용하세요. 두 Engine은 서로 다른 소켓, containerd 프로세스, 이미지 저장소를 갖지만 이 VM의 커널을 공유합니다. 이는 통제된 수신 경계이며, 두 물리적 머신이나 완전한 재해 복구를 뜻하지 않습니다. 읽기와 일반적인 실수를 포함해 약 45분을 예상하세요. 이는 저자의 예상 시간입니다.
수신 경계 살펴보기
이 단계에서는 어느 Engine도 변경하기 전에 둘을 구분합니다. Source Exhibition에서 시작하세요. Pocket compass와 Crossing ledger를 열어 레코드를 읽고 현장 기록지를 다운로드하세요. 컬렉션 페이지의 River edition 2를 확인합니다. Receiving Exhibition은 현재 HTTP 503과 함께 Exhibition not running을 표시하며 소스 페이지를 빌려 쓰지 않습니다.
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
Engine ID는 서로 다릅니다. 수신 측에는 관련 없는 receiving-desk 참조 서비스에서 사용하는 Python 베이스 이미지가 있지만 필요한 전시 태그는 둘 다 없습니다. 그 서비스와 수신 Engine 자체를 온전히 유지하세요.
수신 Engine은 과정 컨테이너 dk03-receiver 안에 있습니다. 다음 두 읽기 전용 명령은 소스 Engine을 통해 그 컨테이너 안에서 도구를 실행합니다. ip route는 기본 경로가 없는 연결 경로들을 보여 줍니다. wget은 실제 레지스트리 요청을 시도하며, -T 5는 네트워크 대기 시간을 제한하고 -O /dev/null은 응답 본문을 버립니다. 이 수신 네임스페이스에는 레지스트리로 가는 경로가 없으므로 이 시도는 0이 아닌 상태로 실패할 것으로 예상됩니다.
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
첫 시도에서는 대상이 존재하지 않습니다. 본인의 복사를 반복할 때는 packet 디렉터리를 한 단계 더 중첩하지 않도록 cp -r packet/. /home/labex/project/receiving/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는 레지스트리 pull을 금지하며, --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가 이미지가 없다고 하면 pull하지 말고 패킷을 수정하여 로드하세요. 페이지가 Collection unavailable을 표시하면 동일한 Compose 접두 명령 뒤에 logs records를 붙여 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는 pull과 build를 비활성화한 채 수신 측 설정과 자료로 시작했습니다. 소스 서비스 두 개를 모두 중지한 뒤에도 전체 전시는 계속 작동했습니다.



