Docker registry
Локальный реестр.
Используем команду
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
registry:2
После запуска команды локальный docker реестр готов к использованию. Но это годится только для примера. Для производственной среды нужно защитить реестр с помощью TLS/SSL и конечно использовать механизм контроля доступа.
Копирование образа в локальный реестр
Можно полчить образ из Docker Hub и затем записать его в локальньй реестр.
# получить образ ubuntu:16.04 из Docker Hub
$ docker pull ubuntu:16.04
# добавить тег localhost:5000/my-ubuntu.
# в первой чатсти тега имя хоста и порт, Docker
# интерпретирует это как адрес реестра, при
# записи образа (push)
$ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
# записать образ в локальный реестр
$ docker push localhost:5000/my-ubuntu
# теперь удалим локально-кешированные образы
# ubuntu:16.04 и localhost:5000/my-ubuntu
$ docker image remove ubuntu:16.04
$ docker rmi localhost:5000/my-ubuntu
# получить образ из локального реестра
$ docker pull localhost:5000/my-ubuntu
Остановить локальный реестр
Для остановки используется docker container stop
, также как и для всех других контейнеров
$ docker container stop registry
Для удаления контейнера
$ docker container stop registry \
&& docker container rm -v registry
Запуск реестра автоматически
Если предполагается использовать реестр, как часть
постоянной инфраструктуры, то небходимо установить автоматический перезапуск при перезапуске Docker
$ docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
registry:2
Настройка порта
Если порт 5000 уже используется на хосте, или есть необходимость запустить несколько реестров на одном хосте:
$ docker run -d \
-p 5001:5000 \
--name registry-test \
registry:2
Если нужно изменить порт реееста внутри контейнера, нужно использовать переменную окружения REGISTRY_HTTP_ADDR
$ docker run -d \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5001 \
-p 5002:5001 \
--name registry-test-5002
registry:2
Хранилище реестра
По умолчанию, данные реестра сохраняются с использованием томов (docker volume) на хосте. Если необходимо хранить данные в определенной локации файловой системы, то нужно использовать привязку/монтирование. Монтирование имеет большую связь со структурой файловой системы хоста, но имеет лучшие показатели скорости работы во многих случаях.
$ docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /mnt/registry:/var/lib/registry \
registry:2
если использовать различные драверы, то данные реестра можно сохранить в S3, Google Cloud, OSS, Azure...
Запуск реестра с доступом из-вне.
Доступный только локально реест удобен только для тестирования, но для реальной работы он практически бесполезен.
Лучшим решением будет использовать nginx proxy или готовые решения типа Harbor.