Получение образа докера по дайджесту
Я хотел бы спросить, почему при извлечении образа докера нужно указывать и имя, и дайджест?
docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Разве недостаточно просто передать дайджест, или дайджест недостаточно уникален в контексте всего репозитория докеров?
Например так:
docker pull sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
4 ответа
Изображения берутся из реестров. Имена образов включают реестр, напримерquay.io/yourgroup/yourimage
тянет из quay.io
сервер.
Но ubuntu
Вы говорите, что не включает имя сервера?
Если имени сервера нет, по умолчанию используется Docker Hub, также известный как docker.io
. Такubuntu
такой же как docker.io/library/ubuntu
.
Таким образом, у вас должно быть имя, чтобы он знал, с каким сервером реестра образов разговаривать.
Вы должны передать опцию изображения своей команде следующим образом:
извлечение образа докера [ОПЦИИ] ИМЯ [: ТЕГ |@ ДАЙДЖЕСТ]
Например:
docker image pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
API реестра открыт с множеством реализаций, поэтому у вас может быть несколько серверов реестра (Docker Hub, самостоятельные решения, такие как Harbour, и другие коммерческие варианты размещения, включая Github и Gitlab). Сам API реестра построен на отправке запросов в репозиторий, поэтому вы не можете использовать только дайджест, вам нужно знать не только, с каким сервером реестра вы разговариваете, но и какое имя репозитория на этом сервере вы получаете.
Апи для рывка будет просить:
GET /v2/<name>/manifests/<reference>
Имя и параметр ссылки идентифицируют изображение и являются обязательными. Ссылка может включать тег или дайджест.
("Имя", указанное в этой документации, является именем репозитория.)
Команды докера отражают этот дизайн API, требуя имени образа. Если вы опустите тег или дайджест, по умолчанию будет использоваться "последний". Когда вы опускаете имя реестра, по умолчанию используется Docker Hub. И если вы также не указали имя пользователя, он добавляет к имени реестра префиксlibrary/
где все официальные образы находятся на Docker Hub.
Итак, запрос на перенос ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
превратится в просьбу к registry-1.docker.io
(сервер API реестра для Docker Hub) для репозитория library/ubuntu
со ссылкой на указанный вами sha256.
Попытка оставить имя репозитория из извлечения приведет к неверному синтаксису (докер будет называть это ссылочным форматом), потому что он не может экстраполировать репозиторий из ничего, а имя репозитория по умолчанию отсутствует.
Дайджест может быть уникальным для всех изображений в репозитории докеров, но как вы думаете, что является более распространенным использованием? Получение изображения с именемubuntu
или потянув изображение с именем sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
?
Извлечение с помощью дайджеста тоже не распространено. Используются теги изображений.
например: docker pull ubuntu:16.04