itmo_conspects

Лекция 4. Реестр Docker

Реестр Docker (Docker Registry) - это служба для хранения, управления и распространения Docker-образов

Реестр может быть:

Реестр разбит на репозитории - один репозиторий хранит образы с одним конкретным именем разных версий. Сам реестр представляет собой базу данных вида NoSQL, к которой другие участники сети имеют доступ по протоколу HTTP(S) через порт 5000

Самый простой способ запустить приватный реестр - это запустить соответствующий образ, который содержит логику реестра:

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /opt/registry/data:/var/lib/registry \
  registry:3

Образ реестра называется registry:3 и доступен в реестре Docker Hub. Здесь было сделано монтирование папки /opt/registry/data на хосте к папке /var/lib/registry контейнера, чтобы образы хранились в файловой системе реальной машины, а не контейнера. Аргумент --restart=always говорит, что демон containerd должен перезапускать контейнер, если его выполнение нештатно прекратилось


Чтобы загрузить образ из реестра на локальную машину, можно воспользоваться командой docker pull:

docker pull адрес-реестра/имя-образа:тег-версии

Вместо тега версии можно указать latest - тогда загрузиться образ последней версии (в лексикографическом порядке)

Изначально запущенный первый раз реестр пуст. Для того, чтобы его заполнить нужными образами, нужно присвоить образу тег, который содержит адрес машины с реестром:

docker tag имя-образа:тег-версии адрес-реестра/имя-образа:тег-версии

А далее можно воспользоваться командой docker push:

docker push адрес-реестра/имя-образа:тег-версии

Без указания адреса (то есть docker push my-app:1.0) утилита загрузит образ в публичный реестр Docker Hub

По умолчанию, общение с реестром происходит по протоколу HTTPS, то есть реестр должен иметь действующий сертификат подлинности, чтобы избежать атаки “человек посередине” (man-in-the-middle attack, MITM). Сертификат должен выдать центр сертификации, но, если такой возможности нет, можно: