Docker
Реестр закрытого / безопасного Docker с API v2
Поиск…
Вступление
Частный и безопасный реестр докеров, а не Docker Hub. Требуются базовые навыки докеров.
параметры
команда | объяснение |
---|---|
sudo docker run -p 5000: 5000 | Запустите контейнер докеров и привяжите порт 5000 от контейнера к порту 5000 физической машины. |
Реестр имен | Название контейнера (лучше использовать для чтения «докер ps»). |
-v 'pwd' / certs: / certs | Bind CURRENT_DIR / certs физической машины на / certs контейнера (например, «общая папка»). |
-e REGISTRY_HTTP_TLS_CERTIFICATE = / certs / server.crt | Мы указываем, что реестр должен использовать файл /certs/server.crt для запуска. (переменная env) |
-e REGISTRY_HTTP_TLS_KEY = / certs / server.key | То же самое для ключа RSA (server.key). |
-v / root / images: / var / lib / registry / | Если вы хотите сохранить все изображения реестра, вы должны сделать это на физической машине. Здесь мы сохраняем все изображения на / root / images на физической машине. Если вы это сделаете, вы можете остановить и перезапустить реестр без потери изображений. |
реестр: 2 | Мы указываем, что мы хотели бы вытащить изображение реестра из узла докеров (или локально), и мы добавим «2», потому что мы хотим установить версию 2 реестра. |
замечания
Создание сертификатов
Создайте закрытый ключ RSA: openssl genrsa -des3 -out server.key 4096
На этом этапе Openssl должен запросить пропущенную фразу. Обратите внимание, что мы будем использовать только сертификат для связи и аутентификации без пропущенной фразы. Например, используйте 123456.
Сгенерировать запрос openssl req -new -key server.key -out server.csr
сертификата: openssl req -new -key server.key -out server.csr
Этот шаг важен, потому что вас попросят получить некоторую информацию о сертификатах. Наиболее важной информацией является «Общее имя», которое является доменным именем, которое используется для связи между частным реестром докеров и всей другой машиной. Пример: mydomain.com
Удаление фразы из закрытого ключа RSA: cp server.key server.key.org && openssl rsa -in server.key.org -out server.key
Как я уже сказал, мы сосредоточимся на сертификате без фразы. Поэтому будьте осторожны со всеми файлами вашего ключа (.key, .csr, .crt) и держите их в надежном месте.
Создайте самозаверяющий сертификат: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Теперь у вас есть два важных файла: server.key и server.crt , которые необходимы для проверки подлинности частного реестра.
Запуск реестра с самозаверяющим сертификатом
Чтобы запустить частный реестр (безопасно), вы должны создать самозаверяющий сертификат, вы можете обратиться к предыдущему примеру для его создания.
В моем примере я помещал server.key и server.crt в / root / certs
Перед запуском команды docker вы должны поместить (используйте cd
) в каталог, содержащий папку certs . Если вы этого не сделаете, и вы попытаетесь запустить команду, вы получите сообщение об ошибке
level = fatal msg = "open /certs/server.crt: нет такого файла или каталога"
Когда вы находитесь ( cd /root
в моем примере), вы можете в основном запустить защищенный / закрытый реестр, используя: sudo docker run -p 5000:5000 --restart=always --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key -v /root/Documents:/var/lib/registry/ registry:2
Объяснения о команде доступны в разделе «Параметры».
Потяните или нажмите от клиента докера
Когда вы запускаете рабочий реестр, вы можете тянуть или нажимать на него изображения. Для этого вам нужен файл server.crt в специальную папку на вашем docker-клиенте. Сертификат позволяет выполнить аутентификацию с помощью реестра, а затем шифровать связь.
Скопируйте server.crt из реестра в файл /etc/docker/certs.d/mydomain.com:5000/ на клиентской машине. Затем переименуйте его в ca-certificates.crt : mv /etc/docker/certs.d/mydomain.com:5000/server.crt /etc/docker/certs.d/mydomain.com:5000/ca-certificates.crt
На этом этапе вы можете извлекать или перемещать изображения из своего частного реестра:
PULL: docker pull mydomain.com:5000/nginx
или
ОТ СЕБЯ :
- Получите официальное изображение с hub.docker.com:
docker pull nginx
- Отметьте это изображение перед тем, как
docker tag IMAGE_ID mydomain.com:5000/nginx
в частный реестр:docker tag IMAGE_ID mydomain.com:5000/nginx
(используйтеdocker images
докеров, чтобы получить IMAGE_ID) - Вставьте изображение в реестр:
docker push mydomain.com:5000/nginx