Docker: Каков самый простой способ защитить частный реестр?
Наши изображения Docker отправляют закрытые источники, мы должны хранить их где-то в безопасности, используя собственный приватный реестр докеров.
Мы ищем самый простой способ развернуть частный реестр докеров с простым уровнем проверки подлинности.
Я нашел:
Я думаю использовать shipyard/docker-private-registry
, но есть ли другой лучший способ?
Ответы
Ответ 1
Я все еще изучаю, как запускать и использовать Docker, подумайте об этом:
# Run the registry on the server, allow only localhost connection
docker run -p 127.0.0.1:5000:5000 registry
# On the client, setup ssh tunneling
ssh -N -L 5000:localhost:5000 [email protected]
Затем реестр доступен на localhost: 5000, аутентификация выполняется через ssh, который вы, вероятно, уже знаете и используете.
Источники:
Ответ 2
Вы также можете использовать интерфейс Nginx с Basic Auth и SSL-сертификатом.
Что касается сертификата SSL, я пробовал пару часов, чтобы иметь действующий самозаверяющий сертификат, но Docker не смог работать с реестром. Чтобы решить эту проблему, у меня есть бесплатный подписанный сертификат, который отлично работает. (Я использовал StartSSL, но есть и другие).
Также будьте осторожны при создании сертификата. Если вы хотите, чтобы реестр работал на URL registry.damienroch.com, вы должны указать этот URL-адрес в поддомене, иначе он не будет работать.
Вы можете выполнить всю эту настройку с помощью Docker и моего изображения nginx-proxy (см. README on Github: https://github.com/zedtux/nginx-proxy).
Это означает, что в случае, когда вы установили nginx с помощью диспетчера дистрибутива, вы замените его контейнером nginx.
- Поместите свой сертификат (
.crt
и .key
) на свой сервер в папке (я использую /etc/docker/nginx/ssl/
, а имена сертификатов private-registry.crt
и private-registry.key
)
- Создайте файл .htpasswd и загрузите его на свой сервер (я использую
/etc/docker/nginx/htpasswd/
, а имя файла accounts.htpasswd
)
- Создайте папку, в которой будут сохранены изображения (я использую
/etc/docker/registry/
)
- Использование docker для запуска моего образа nginx-proxy
- Запустите реестр докеров с некоторой переменной среды, которую nginx-proxy будет использовать для настройки.
Ниже приведен пример команд для выполнения предыдущих шагов:
sudo docker run -d --name nginx -p 80:80 -p 443:443 -v /etc/docker/nginx/ssl/:/etc/nginx/ssl/ -v /var/run/docker.sock:/tmp/docker.sock -v /etc/docker/nginx/htpasswd/:/etc/nginx/htpasswd/ zedtux/nginx-proxy:latest
sudo docker run -d --name registry -e VIRTUAL_HOST=registry.damienroch.com -e MAX_UPLOAD_SIZE=0 -e SSL_FILENAME=private-registry -e HTPASSWD_FILENAME=accounts -e DOCKER_REGISTRY=true -v /etc/docker/registry/data/:/tmp/registry registry
Первая строка запускает nginx, а второй - реестр. Важно сделать это в этом порядке.
Когда оба пользователя работают и работают, вы должны иметь возможность входа в систему:
docker login https://registry.damienroch.com
Ответ 3
Я создал почти готовый к использованию, но, конечно, готов к настройке для запуска docker-реестра: https://github.com/kwk/docker-registry-setup.
Возможно, это помогает.
В контейнерах работает все (Registry, сервер Auth и сервер LDAP)), что делает детали заменяемыми, как только вы будете готовы к. Настройка полностью сконфигурирована таким образом, чтобы было легко начать работу. Существуют даже демо-сертификаты для HTTP, но они должны быть заменены в какой-то момент.
Если вы не хотите, чтобы аутентификация LDAP, но простая статическая аутентификация, вы можете отключить ее в auth/config/config.yml
и добавить свою собственную комбинацию имен пользователей и хешированных паролей.