Как настроить Private Docker Registry в Ubuntu 20.04
Для разработки Smooth CI / CD с использованием платформы Docker рассмотрите возможность использования автономного сервера реестра Docker. Реестр Docker — это репозиторий, в котором вы можете хранить образы докеров и извлекать их для запуска приложений на сервере. Для более быстрой доставки, а также для обеспечения безопасности инфраструктуры рекомендуется создать собственный частный реестр докеров для хранения образов докеров и их распространения среди организаций. В этой статье мы узнаем, как настроить частный реестр докеров в Ubuntu 20.04.
Предпосылки
- Учетная запись пользователя с привилегиями sudo
- Сервер для реестра Docker
- Nginx на сервере реестра Docker
- Клиентский сервер
- Docker и Docker-Compose на обоих серверах.
Частный реестр Docker
Реестр Docker — это серверное приложение, которое позволяет хранить образы докеров локально в одном централизованном месте. Настроив собственный сервер реестра докеров, вы можете извлекать и отправлять образы докеров без необходимости подключаться к концентратору Docker, что экономит пропускную способность и предотвращает угрозы безопасности.
Прежде чем ты начнешь
Перед тем как начать, я гарантирую, что вы установили Docker и Docker-Compose как на клиентском сервере, так и на локальном сервере реестра. Чтобы убедиться, что вы установили необходимое программное обеспечение, вы можете выполнить следующие команды, чтобы проверить версию программного обеспечения.
$ docker version
$ docker-compose version
Кроме того, вам необходимо убедиться, что служба докеров запущена и настроена для включения во время загрузки:
$ sudo systemctl start docker $ sudo systemctl enable docker
Установить и настроить частный реестр Docker
Чтобы настроить частный реестр Docker, выполните следующие действия:
Создать каталоги реестра
Настройте свой сервер, на котором будет размещен частный реестр. Создайте новый каталог, в котором будут храниться все необходимые файлы конфигурации.
Используйте следующую команду, чтобы создать новый каталог проекта my-registry и два подкаталога nginx и auth. Вы можете иметь собственное предположение для названия проекта.
$ mkdir -p my-registry/{nginx, auth}
Теперь перейдите в каталог проекта и создайте новые каталоги внутри nginx как:
$ cd my-registry/ $ mkdir -p nginx/{conf.d/, ssl}
Создание скрипта и сервисов Docker-Compose
Вам необходимо создать новый скрипт docker-compose.yml, который определяет версию docker-compose и службы, необходимые для настройки частного реестра.
Создайте новый файл « docker-compose.ym l» в каталоге « my-registry » с помощью редактора vi.
$ vi docker-compose.yml
Определите свою службу в файле docker-compose как:
services: #Registry registry: image: registry:2 restart: always ports: - "5000:5000" environment: REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - myregistrydata:/data - ./auth:/auth networks: - mynet #Nginx Service nginx: image: nginx:alpine container_name: nginx restart: unless-stopped tty: true ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ networks: - mynet #Docker Networks networks: mynet: driver: bridge #Volumes volumes: myregistrydata: driver: local
Сохраните и закройте файл
Настройка переадресации портов nginx
Нам нужно создать конфигурацию виртуального хоста nginx для веб-службы nginx. Перейдите в каталог nginx/conf.d, созданный на предыдущем шаге.
$ cd nginx/conf.d/
Теперь создайте файл виртуального хоста nginx в текстовом редакторе. В этом примере я назову его myregistry.conf. У вас может быть собственное предположение.
$ vi myregistry.conf
Добавьте следующее содержимое:
upstream docker-registry { server registry:5000; } server { listen 80; server_name registry.infoit.com.ua; return 301 https://registry.infoit.com.ua$request_uri; } server { listen 443 ssl http2; server_name registry.infoit.com.ua; ssl_certificate /etc/nginx/ssl/certificate.crt; ssl_certificate_key /etc/nginx/ssl/private.key; # Log files for Debug error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; location / { if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) { return 404; } proxy_pass http://docker-registry; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 900; } }
Замените свое доменное имя параметром server_name и сохраните файл.
Увеличьте размер загружаемого файла nginx
По умолчанию nginx имеет ограничение на загрузку файлов в 1 МБ. Поскольку изображения докеров превышают этот предел, вам необходимо увеличить размер загрузки в файле конфигурации nginx. В этом примере я собираюсь создать дополнительный файл конфигурации nginx с лимитом загрузки 2 ГБ.
Перейдите в каталог конфигурации nginx
$ cd myregistry/nginx/conf.d $ vi additional.conf
Добавьте следующую строку и сохраните файл
client_max_body_size 2G;
Настроить SSL-сертификат и аутентификацию
После создания файла конфигурации nginx нам нужно настроить сертификат ssl. У вас должен быть действующий файл сертификата ssl с закрытым ключом. Скопируйте файл сертификата и закрытый ключ в каталог nginx / ssl как:
$ cd myregistry/nginx/ssl $ cp /your-ssl-certificate-path/certificate.crt . $ cp /your-private-key-path/private.key .
Если у вас нет действительного приобретенного сертификата ssl, вы можете создать свой собственный самоподписанный сертификат ssl. Помните, что самоподписанный ssl-сертификат не рекомендуется для производственных сред. Чтобы сгенерировать самоподписанный ssl-сертификат, выполните следующую команду:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout \ /etc/ssl/private/nginx-private.key -out /etc/ssl/certs/nginx-certificate.crt
Вам будет предложено предоставить некоторые детали, такие как код страны, имя домена, идентификатор электронной почты. Заполните детали и продолжайте.
Теперь настройте базовую аутентификацию как:
Перейти в каталог авторизации
$ cd auth
Запросите новый файл паролей с именем registry.password для вашего пользователя. В этом примере я буду использовать пользователя infoit .
$ htpasswd -Bc registry.password infoit
Если вы получили сообщение « htpasswd not found command », запустите следующую команду в своем терминале и повторите попытку.
$ sudo apt install apache2-utils -y
Введите надежный пароль и введите его еще раз, чтобы подтвердить свой пароль. Вы добавили пользователя с базовой аутентификацией для реестра Docker.
Запустить Docker Registry
Вы завершили настройку. Вы можете создать реестр с помощью команды docker-compose.
Переходим в каталог, где создаем файл docker-compose.yml
$ cd myregistry
Теперь выполните следующую команду:
$ docker-compose up -d
Реестр Docker запущен, вы можете проверить работающие контейнеры, используя следующую команду:
$ docker ps -a
Вы получите следующий результат:
Вы получите следующий результат:
$ docker pull centos
После успешного извлечения изображений из концентратора докеров пометьте изображение, чтобы пометить его для частного реестра.
В этом примере я собираюсь пометить изображения centos как:
: registry.infoit.com.ua/infoit-centos
$ docker image tag [image name] registry.infoit.com.ua/[new-image-name]
Пример:
$ docker images tag centos registry.infoit.com.ua/infoit-centos
Чтобы проверить, доступен ли образ докера локально или нет, выполните следующую команду.
$ docker images
Отправить образ докера в частный реестр
Вы вытащили образ докера из концентратора докеров и создали тег для частного реестра. Теперь вам нужно отправить образ локального докера в частный реестр.
Во-первых, войдите в свой частный реестр, используя следующую команду:
$ docker login https://registry.infoit.com.ua/v2/
Используйте свой собственный URL-адрес реестра вместо https://registry.infoit.com.ua.
Вам будет предложено ввести имя пользователя и пароль; вы получите сообщение об успешном входе в систему.
Теперь вы можете отправить свой образ докера в частный реестр. Чтобы отправить изображение, выполните следующую команду:
$ docker push registry.infoit.com.ua/infoit-centos
Замените имя изображения после docker push
После завершения отправки вы можете перейти в браузер и ввести URL-адрес:
https://registry.infoit.com.ua/v2/_catalog
Замените registry.infoit.com.ua своим собственным URL-адресом и обеспечьте базовую аутентификацию. Вы найдете список репозиториев как:
Получение образа докера из частного реестра
Вы поместили свой локальный образ докера в свой частный реестр докеров. Таким же образом вы можете вытащить образы докеров из частного реестра докеров на локальный сервер.
Выполните следующую команду, чтобы войти на свой частный сервер реестра.
$ docker login https://registry.infoit.com.ua
Замените registry.infoit.com.ua своим частным URL-адресом реестра и обеспечьте базовую аутентификацию. После успешного входа в систему выполните следующую команду, чтобы извлечь образ докера из частного реестра. В этом примере я собираюсь загрузить ранее загруженный образ докера на локальный сервер. У вас может быть собственное предположение для имени образа докера.
$ docker pull registry.infoit.com.ua/infoit-centos
Заключение:
Из этой статьи вы узнали, как разместить собственный частный реестр докеров. Также вы получили представление о том, как вытащить образы из концентратора докеров на локальный сервер, пометить изображение и отправить его в частный реестр. Вы также узнали, как извлекать образы докеров из частного реестра на локальном сервере.