Создание приватного Docker Registry

Создание персонального приватного реестра образов Docker Registry. Создание поддомена и виртуальной машины. Подключение сторонних хранилищ.

  • 00:02:45 - Обзор документации
  • 00:07:20 - Создание реестра
  • 00:08:42 - Сборка и push образов
  • 00:11:37 - Аутентификация
  • 00:13:03 - Добавление Nginx proxy
  • 00:15:47 - Фиксация девелоперского htpasswd
  • 00:17:15 - Прокси с Lets Encrypt для рабочего сервера
  • 00:18:42 - Команда деплоя на production
  • 00:21:12 - Настройка виртуальной машины с Ansible
  • 00:24:29 - Создание виртуальной машины
  • 00:26:38 - Деплой на готовый сервер
  • 00:29:53 - Push в рабочий репозиторий
  • 00:31:22 - Контроль места на диске
  • 00:32:25 - Garbage collector
  • 00:35:19 - Подключение сторонних хранилищ
Скрытый контент
Комментарии (42)
fedot

Спасибо

Ответить
Arunas

Спасибо, замечательный урок.

Ответить
Arunas

а Lets Encrypt здесь, в Docker регистре, это то же самое, как, напр., у Nginx gateway/docker/production/nginx/conf.d/frontend.conf?

Ответить
Дмитрий Елисеев

Да, всё то же самое.

Ответить
Дмитрий

Очень полезный урок. В начале бы курса, но и сейчас хорошо.

Ответить
Дмитрий

И всё же это вариант с отдельной виртуалкой для реестра? Если пытаться поднять этот проект на уже занятой виртуалке, то пишет что порт 443 уже занят. Естественно, ведь там уже gateway есть. Добился что можно менять проекты на одной виртуалке с одинаковым gateway с настроенным доступом к реестру. Использую один реестр на всё про всё с помощью volumes: registry: name: registryname. После пуша и деплоя другого проекта реестр продолжает работать.

Ответить
Дмитрий

Хотя сейчас понял, что можно не задавать жестко имя реестра, а пользоваться одинаковым COMPOSE_PROJECT_NAME

Ответить
Дмитрий Елисеев

порт 443 уже занят

В этом случае registry можно поднять на любом другом порту и указывать везде его поддомен с этим портом.

Ответить
Дмитрий

Может мы о разном? я про то что сервис nginx из этого проекта не может подняться поскольку gateway из другого уже занимает порты 80 и 443. Или я не понял.

Ответить
Дмитрий Елисеев

В nginx реестра убираем порт 80 и меняем 443 на 5443. И работаем с registry.xxx:5443.

Ответить
Дмитрий

Понял, спасибо!

Ответить
Arunas

удалить всю эту часть?

server {
    listen 80;
    server_name registry.demo-auction.arsku.com;

в docker\production\nginx\conf.d\registry.conf

а как тогда ssl?

Ответить
Дмитрий Елисеев

Да, либо удалить этот блок с listen 80; и оставить listen 5443 ssl;, либо поменять порты в docker-compose-production,yml:

ports:
    - "5443:443"
Ответить
Arunas

понял, спасибо.

Ответить
Arunas

заработало, registry.demo-auction.arsku.com:5443/v2/_catalog , но не могу попасть - пароль почему-то не верный...
у Вас пароль password или htpasswd?

Ответить
Arunas

наконец вошел - оказывается, в пароль не можно знак $

Ответить
fedot

Дмитрий, извиняюсь, а вы не могли бы уточнить, зачем нам эти реестры и прочее если на локальной машине все есть, разве не проще грузить на виртуалку наш проект и запустить уже там докер по нашему прод файлу, предварительно поставив то что надо ансамблем? А надо там только докер как я понял, извиняюсь если не внимательно слушал, но этот момент не смог понять что-то. Или это делается для того, что бы не качались официальные образы, которые могут резко измениться и что то нам сломать в самый неподходящий момент? Если это так, то разве нельзя грузить из официального реестра строго определенный образ, который мы точно знаем что работает?

Ответить
Дмитрий Елисеев

Так можно в примитивном случае сделать с проектами на PHP, так как не нужно что-то компилировать.

Но если мы запустим docker-compose build в проекте на NodeJS или Java, то на слабой одноядерной виртуалке оно будет собираться десять минут со 100% нагрузкой. Если запускаем на кластере из нескольких виртуалок, то так весь кластер "ляжет".

Поэтому при работе с Docker предполагается, что мы собираем образ-архив с готовым скомпилированным кодом у себя на сборочном компьютере. И через реестр закидываем уже собранные образы на свои виртуалки и мгновенно там запускаем.

Ответить
fedot

Спасибо, за исчерпывающий ответ, но конечно всё равно хотелось бы рассмотреть и такой вариант в курсе, если есть такая возможность конечно, клонирование проекта может помочь если надо что то быстро поменять на проде, а на пример с реестром что то случилось и быстро разобраться не получается.

Ответить
Дмитрий Елисеев

если надо что то быстро поменять на проде

Если в проекте автодеплой, то вручную на прод обычно вообще никто не ходит. Если что-то сломалось, то либо запускают откат, либо сразу коммитят исправление и запускают следующий деплой.

Ответить
fedot

Ясно, спасибо.

Ответить
Arunas

auction в Dev реж. поднялся хорошо - работало localhost/8080, 8081, 8082.
Но после
docker-compose run --rm api-php-cli composer update
не поднялся 8081 (api):
Fatal error: Access level to App\ErrorHandler\LogErrorHandler::$logger must be protected (as in class Slim\Handlers\ErrorHandler) or weaker in /app/src/ErrorHandler/LogErrorHandler.php on line 15

Ответить
Дмитрий Елисеев

Да, так как в новой версии Slim в ErrorHandler добавили свой protected $logger.

Ответить
Arunas

спасибо за ответ.

Ответить
Arunas

что это за параметр в docker-compose-production.yml: SENTRY_DSN: ${SENTRY_DSN} ?

Ответить
Дмитрий Елисеев

Ключ для подключения сервиса Sentry из 24-го эпизода.

Ответить
Александр

Спасибо за урок! Очень полезно. Сделайте еще по sentry.

Ответить
Дмитрий Елисеев

Про его установку себе через Docker?

Ответить
Александр

Да да, не облачное решение, а поднятии своего с использованием докера

Ответить
fedot

Поддержу, всегда приятнее иметь такую вещь у себя и не зависеть от внешних источников, а то мало ли, возьму и уберут бесплатный тариф вообще или РКН адресом ошибется и все посыпется, а так на одном образе можно разные проекты держать и не париться.

Ответить
Александр

Почему-то после docker run --rm registry:2 htpasswd -Bbn registry password > htpasswd

Ошибка write /dev/stdout: permission denied

Ответить
Александр

Может с убунтой что не так, подскажите пожалуйста линуксоводы

Ответить
Александр

Понял в чем ошибка, она возникает при работе через терминал шторма. Решение - все команды вводил через родную консоль убунты - все отработало , без ошибок доступов. Может как шторм надо в убунте поднастроить незнаю, чтоб робить нормально через его консоль.

Ответить
Ярослав

После ввода команды docker run --rm registry:2 htpasswd -Bbn registry password > htpasswd пишет, что htpasswd не найдено. А когда используется nginx, то вовсе создает пустую папку вместо файла. Но аутентификация работает, правда я не знаю ни логина, ни пароля. Вроде делал то же самое.

Ответить
Дмитрий Елисеев

А просто команда docker run --rm registry:2 htpasswd -Bbn registry password хэш генерирует?

Ответить
Ярослав

Тот же результат. /entrypoint.sh: exec: line 10: htpasswd: not found Решил проблему только установкой apache-utils и команда в итоге чуть другая. Может из-за этого у меня не пулятся образы с реестра при деплое с основного проекта. Я эту проблему описал в комментарии к 5-му уроку.

Ответить
Дмитрий Елисеев

Удалили в последней версии. Используйте registry:2.6 вместо registry:2

Ответить
Ярослав

Так заработало. Спасибо.

Ответить
Михаил

Дмитрий, какие посоветуете UI для докер репозитория?

Ответить
Дмитрий Елисеев

Любой.

Ответить
Подскажите пожалуйста после запуска docker-compose и обращении к странице выдает ошибку

Подскажите Dockrer начал выдавать ошибки при сборке - net/http: TLS handshake timeout. Причем то на один пакет ругается то на другой. В чем может быть проблема? Конфигурацию не менял.

Ответить
Дмитрий Елисеев

Да, тоже бывает иногда. Проблема на сервере Docker.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий