Introdução
O Marsh House está enviando Along the waterline, River edition 1, a um quiosque receptor que não consegue acessar um registro de imagens. A exposição tem um serviço web, uma API de registros e um diretório com arquivos da coleção. Prepare uma pasta que contenha tudo o que é necessário para executar essa versão exata em outro lugar.
Você deve conhecer os comandos básicos de construção/execução do Docker, portas publicadas e caminhos no terminal. Este laboratório ensina o pequeno arquivo Compose, os arquivos de imagens e a coleta portátil de arquivos. Não é necessário saber programar ou conhecer museus. O Docker e as duas imagens da aplicação estão preparados. Os registros e as ilustrações esquemáticas originais são materiais didáticos fictícios.
Use Workstation para comandos e Source Exhibition para o exemplo funcional. Receiving Exhibition começa vazia; você usará esse limite de entrega no próximo laboratório independente. O resultado deste laboratório é um pacote completo, em vez de um receptor em execução. Reserve cerca de 45 minutos para leitura e erros comuns; essa é uma estimativa do autor.
Conheça a exposição completa
Nesta etapa, você identificará o que deve ser preservado na entrega e salvará o par exato de imagens. Comece em Source Exhibition. A página mostra quatro objetos. Abra Pocket compass, examine sua ilustração e história e selecione Download field sheet. Isso baixa um registro de texto real com uma edição, um ID de objeto e uma descrição. Use Back to collection, abra Crossing ledger e baixe também essa ficha de campo. São objetos distintos com seus próprios registros e arquivos.
A coleção vincula cada objeto à sua própria página de detalhes e ao download da ficha de campo:

Mude para Workstation. Ela inicia em /home/labex/project/exhibition-release. pwd mostra a pasta atual, ls lista seu conteúdo e cd volta para ela se você sair:
cd /home/labex/project/exhibition-release
ls
compose.yaml descreve os dois serviços em execução. release.json identifica esta edição e os IDs imutáveis das imagens por trás de suas tags. collection/ contém os registros JSON publicados, as ilustrações SVG originais e os downloads de texto. author-notes/ contém rascunhos não publicados e deve ficar fora do pacote. Mantenha todos os materiais fornecidos e os serviços de origem em execução inalterados.
cat mostra um arquivo de texto. Leia o registro da versão:
cat release.json
Encontre as entradas web e api. Suas tags são field-notes/web:pack e field-notes/api:pack; cada uma também tem um ID de imagem que começa com sha256:. Uma tag é um nome que pode mudar de referência. O ID identifica esse conteúdo específico da imagem. Entregue as entradas da versão juntas; uma imagem web funcional sozinha não pode fornecer os registros ou arquivos.
mkdir cria um diretório; -p cria os diretórios-pai ausentes e aceita um diretório existente. Se packet já existir de uma tentativa sua anterior, examine-a com ls packet e continue preenchendo-a; não exclua as pastas de origem fornecidas.
mkdir -p packet
--context default aponta explicitamente para o Engine de origem. Um contexto nomeia uma conexão com um daemon Docker; não é uma segunda máquina física. docker image save grava a configuração, as tags e as camadas do sistema de arquivos das imagens. -o nomeia o arquivo de saída. Inclua as duas tags da versão neste único arquivo:
docker --context default image save -o packet/images.tar field-notes/web:pack field-notes/api:pack
Isso pode levar algum tempo e normalmente não mostra nada em caso de sucesso. docker container export é diferente: exporta o sistema de arquivos de um contêiner, omite os metadados da imagem e não coleta arquivos de bind mounts. Não pode substituir esta entrega de imagens.
Entenda as relações entre os arquivos de execução
Nesta etapa, você relacionará o arquivo Compose à exposição que acabou de usar e copiará sua configuração portátil. Comece em Workstation e exiba-o:
cat compose.yaml
O YAML usa indentação para expressar relações. services: contém gallery e records. Cada image: seleciona uma imagem preparada; este arquivo não tem receita de construção. gallery serve as páginas do navegador e solicita a coleção a records, a API que lê os materiais publicados.
Os dois serviços usam network_mode: host: compartilham o namespace de rede do host de seu Engine. Aqui, o serviço web escuta na porta 9100 e sua API na 9101. O Engine de origem usa a rede de Workstation. O Engine receptor é executado em seu próprio namespace de rede isolado de contêiner, portanto os mesmos números ali não endereçam a origem. Esta é uma organização didática local deliberadamente pequena, não uma receita geral de segurança de rede.
API_ORIGIN é uma variável de ambiente, um valor nomeado passado ao programa gallery. Seu http://127.0.0.1:9101 aponta para a API no mesmo namespace. records.volumes vincula ./collection a /collection somente para leitura, indicado por :ro. O caminho ./ é relativo ao diretório de projeto Compose, ao lado de compose.yaml. É uma dependência externa de execução: as imagens não a contêm.
Peça ao Compose para analisar o arquivo sem iniciar ou alterar serviços:
docker --context default compose config
--context default seleciona explicitamente o Engine de origem preparado; um contexto é uma conexão nomeada com um daemon Docker, não um segundo computador físico. A saída expande o caminho relativo da coleção para a pasta de origem absoluta atual. Mantenha o caminho relativo do arquivo original para a entrega: copiar esse caminho de origem expandido para o pacote ainda dependeria do local antigo em Workstation.
O conjunto completo agora está claro: o conteúdo de duas imagens, uma configuração Compose e a coleção publicada completa. O compilador, o diretório de construção dos fontes, os rascunhos e os contêineres de origem em execução não são necessários para iniciar a edição recebida.
cp copia um arquivo; -r copia recursivamente um diretório e seus filhos. Copie a configuração portátil original e a coleção publicada:
cp compose.yaml packet/compose.yaml
Monte um pacote portátil
Nesta etapa, você completará o pacote com sua coleção publicada e o examinará como uma entrega que pode ser movida. Comece em Workstation. Crie a pasta da coleção no pacote e depois copie recursivamente o conteúdo do diretório de origem. /. significa seu conteúdo; assim, repetir este comando não cria outro diretório collection aninhado:
mkdir -p packet/collection
cp -r collection/. packet/collection/
Examine o resultado:
ls packet
ls packet/collection
cat packet/compose.yaml
O nível superior tem exatamente compose.yaml, images.tar e collection. A coleção contém exhibits.json, art/ e download/. A montagem do Compose ainda começa com ./collection, nunca com o caminho absoluto da origem. Não copie author-notes nem release.json para o pacote de execução: este último é sua evidência de seleção no lado da origem.
A existência de um arquivo ou o tamanho grande de um arquivo de imagens não comprovam completude. A verificação carrega suas duas imagens salvas em um armazenamento de imagens independente e descartável e executa o pacote ali, sem rede, montagens da origem, pull ou build. Ela lê todos os registros, ilustrações e bytes baixados e depois remove seus recursos de teste isolados. Ela não inicia nem altera sua exposição receptora real.
Se a verificação informar uma imagem ausente, releia release.json e execute novamente o mesmo comando de salvamento com as duas tags. Se faltar um arquivo da coleção, compare os dois resultados de ls e copie o diretório publicado corretamente. Se um caminho estiver errado, restaure packet/compose.yaml a partir do arquivo portátil fornecido. Mantenha o pacote aqui neste laboratório; o próximo começa com seus próprios arquivos independentes.
Resumo
Você identificou o conjunto completo de execução de uma aplicação de dois serviços, salvou seu par exato de imagens e reuniu sua coleção externa ao lado de um arquivo Compose portátil. O pacote pode iniciar em um armazenamento de imagens independente sem tomar emprestado o diretório de origem. As camadas das imagens eram apenas uma parte dessa entrega.



