Если вы создаете пользовательские изображения в Docker registry для Вашего предприятия, у вас есть два варианта о том, где размещать свои изображения для Docker:
- Docker Hub – Это служба размещения реестра является бесплатной и предоставляется Docker Inc. Она также имеют несколько функций корпоративного уровня, где вы можете создать несколько учетных записей для организаций, настройки автоматической сборки и т.д.
- Самодостаточны Docker registry – Вы можете настроить реестр Docker в вашей организации, которая будет принимать ваши собственные изображения.
Это руководство объясняет, как установить безопасный самописный Docker реестр.
1. Настройка TLS-сертификата и ключа
Скопируйте существующий сертификат и ключевой файл в каталог ~/docker-certs.
# mkdir /root/docker-certs # cd /root/docker-certs # ls -1 andreyex.crt andreyex.key intermediateCA.pem
В этом примере я использую файл сертификата andreyex.crt и файл andreyex.key, который был создан для моего веб-сервера Apache.
Для получения дополнительной информации о том, как создать свой собственный сертификат и файл ключа, обратитесь к следующему гиду: Как установить сертификат SSL и SPDY на Ubuntu с помощью «Let’s Encrypt».
2. Управление файлом промежуточного сертификата
В этом случае, я также имел сертификат Let’s Ensrypt из моего центра сертификации.
Для Docker registry, вы должны объединить оба сертификата и промежуточный сертификат в тот же файл сертификата.
т.е. добавить содержание вашего промежуточного сертификата в файл сертификат, как показано ниже.
cd /root/docker-certs cat intermediateCA.pem >> andreyex.crt
3. Запустите Ваш защищенный Registry Docker
Теперь запустите безопасный Docker, как показано ниже.
docker run -d -p 5000:5000 --restart=always --name registry \ -v /root/docker-certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/docker-certs/andreyex.crt \ -e REGISTRY_HTTP_TLS_KEY=/root/docker-certs/andreyex.key \ registry:2
В приведенной выше команде:
- Docker registry начал работу на порту 5000
- Название контейнера Docker «registry»
- Локальный каталог, который содержит сертификат /root/docker-cert отображаются в виде /certs внутри контейнера реестра Docker.
- Переменная REGISTRY_HTTP_TLS_CERTIFICATE указывает на файл сертификата с полным путем
- Переменная REGISTRY_HTTP_TLS_KEY указывает на имя файла ключа с полным путем
После запуска реестра Docker, вы теперь увидите работающего контейнера реестра, как показано ниже:
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES v347s8c5dest registry:2 "/entrypoint.sh /etc/" 25 seconds ago Up 1 seconds 0.0.0.0:5000->5000/tcp registry
4. Доступ к защищенному реестру Docker
После того, как безопасный Docker registry настроен, вы можете получить доступ к нему с других серверов внутри вашей сети (или от внешней сети), а также использовать все стандартные команды Docker на нем.
Например, вы можете нажать или вытянуть изображение для этого безопасного Docker registry, как показано ниже.
docker pull andreyex.com:5000/mongodb docker push andreyex.com:5000/mongodb
5. Настройка небезопасного реестра Docker
docker run -d -p 5000:5000 --restart=always --name registry registry:2
При попытке вывести изображение (или выполнить любую другую операцию) из вашего Docker registry, вы можете получить следующее сообщение об ошибке “oversized record received with length”.
Например, когда мы выполнили следующую команду на удаленном сервере (не на сервере, где находится установка docker registry), мы получаем следующее сообщение об ошибке:
# docker pull 192.168.51.1:5000/mongodb Using default tag: latest Error response from daemon: Get https://192.168.51.1:5000/v1/_ping: tls: oversized record received with length 20527
В этом случае, 192.168.51.1 является сервером, на котором работает защищенный docker registry (мы без сертификатов безопасности).
В этом случае на удаленном сервере, вы должны разрешить небезопасные операции в реестре. Для этого вы должны передать параметр «-insecure-реестр» в переменную среды DOCKER_OPTS.
На удаленном сервере изменить этот файл и добавьте следующую строку:
vi /etc/default/docker DOCKER_OPTS="--insecure-registry 192.168.101.1:5000"
Теперь перезапустите docker на удаленном сервере.
systemctl daemon-reload systemctl stop docker systemctl start docker
Теперь, docker будет тянуть (или любая другая команда docker) будет работать без каких-либо проблем, так как стоит небезопасный вариант настройки реестра.
docker pull 192.168.101.1:5000/mongodb