As imagens do Docker são armazenadas como camadas do sistema de arquivos. Todo comando no Dockerfile cria uma camada. Você também pode criar camadas usando a docker commit
partir da linha de comando após fazer algumas alterações (via docker run
provavelmente).
Essas camadas são armazenadas por padrão em /var/lib/docker
. Embora você possa (teoricamente) escolher arquivos a partir de lá e instalá-los em um servidor docker diferente, provavelmente é uma má idéia brincar com a representação interna usada pelo Docker.
Quando você envia sua imagem por push, essas camadas são enviadas para o registro (o registro do docker hub, por padrão ... a menos que você marque sua imagem com outro prefixo do registro) e armazenadas lá. Ao pressionar, o ID da camada é usado para verificar se você já possui a camada localmente ou precisa ser baixada. Você pode usar docker history
para espreitar quais camadas (outras imagens) são usadas (e, até certo ponto, qual comando criou a camada).
Quanto às opções para compartilhar uma imagem sem enviar para o registro do docker hub, suas melhores opções são:
docker save
uma imagem ou docker export
um contêiner. Isso produzirá um arquivo tar para a saída padrão, então você gostaria de fazer algo parecido docker save 'dockerizeit/agent' > dk.agent.latest.tar
. Então você pode usar docker load
ou docker import
em um host diferente.
Hospede seu próprio registro privado. - Desatualizado, ver comentários Consulte a imagem do registro da janela de encaixe . Criamos um registro com suporte para s3, que você pode iniciar e parar conforme necessário (todo o estado é mantido no balde s3 de sua escolha), que é trivial para a configuração. Essa também é uma maneira interessante de observar o que acontece ao enviar para um registro
Use outro registro como o quay.io (ainda não o testei pessoalmente), embora quaisquer preocupações que você tenha com o hub docker provavelmente se apliquem aqui também.