▍Registry¶
Настройка частного реестра Docker в Ubuntu 22.04 в рамках сборки сайта на MkDocs¶
Будем использования Traefik в качестве обратного прокси для маршрутизации трафика внутрь Docker контейнеров. Базовую конфигурацию Traefik можно посмотреть здесь.
Compose для Registry¶
version: '3.3'
services:
registry:
image: registry:2
container_name: registry
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
restart: always
labels:
- "traefik.enable=true"
- "traefik.http.routers.registry-secure.entrypoints=https"
- "traefik.http.routers.registry-secure.rule=Host(`registry.example.com`) && Method(`GET`, `HEAD`, `POST`, `PUT`, `DELETE`, `PATCH`)"
- "traefik.http.routers.registry-secure.tls=true"
- "traefik.http.routers.registry-secure.service=registry"
- "traefik.http.middlewares.registry-auth.basicauth.users=<ADMIN-PASSWORD-OUTPUT>"
- "traefik.http.routers.registry-secure.middlewares=registry-auth"
- "traefik.http.services.registry.loadbalancer.server.port=5000"
- "traefik.http.routers.guest-registry-secure.entrypoints=https"
- "traefik.http.routers.guest-registry-secure.rule=Host(`registry.example.com`) && Method(`GET`, `HEAD`)"
- "traefik.http.routers.guest-registry-secure.tls=true"
- "traefik.http.routers.guest-registry-secure.service=guest-registry"
- "traefik.http.middlewares.guest-registry-auth.basicauth.users=<USER-PASSWORD-OUTPUT>"
- "traefik.http.routers.guest-registry-secure.middlewares=guest-registry-auth"
- "traefik.http.services.guest-registry.loadbalancer.server.port=5000"
Зарегистрируем на этом контейнере 2 набора роутеров и сервисов:
-
registry-secure - роутер и сервис с таким именем будут предоставлять полный доступ (чтение\запись)
-
guest-registry-secure - роутер и сервис с таким именем будут предоставлять гостевой доступ (чтение)
Запускаем registry:
Добавление basic авторизации¶
Сначала мы собираемся сгенерировать комбинацию пользователя и пароля для базовой аутентификации с использованием htpasswd. Если он у вас не установлен, вам нужно сначала сделать это (например, для сервера Ubuntu):
Мы должны экранировать каждый символ “$” в нашем зашифрованном пароле (заменить $ на $$), если мы используем пароль напрямую в docker-compose.yml Пример вывода команды (результат будет разный при каждом запуске команды):Данный вывод нужно вставить в параметры
Публикация в частном реестре Docker¶
Авторизуемся в свой реестр Docker:
Введите логин и соответствующий пароль, заданный ранее.
Сборка своего контейнера с MkDocs¶
Создадим файл Dockerfile c необходимыми нам плагинами и темами:
FROM squidfunk/mkdocs-material
RUN apk add build-base ttf-ubuntu-font-family libffi-dev zlib-dev \
libwebp-dev jpeg-dev harfbuzz-dev fribidi-dev freetype-dev \
cairo-dev musl-dev pango-dev gdk-pixbuf-dev && \
/usr/local/bin/python -m pip install --upgrade pip && \
pip install mkdocs-with-pdf && \
pip install mkdocs-bootswatch && \
pip install mkdocs-blog-plugin && \
pip install mkdocs-awesome-pages-plugin && \
pip install mkdocs-roamlinks-plugin
В директории с этим файлом выполните команду сборки:
Затем поставьте для образа метку расположения частного реестра, чтобы отправить туда образ:
Отправьте образ с меткой в реестр:
Экран результатов должен выглядеть примерно следующим образом:Output
The push refers to a repository [registry.example.com/mkdocs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed
...
Настройка Gitlab-runner¶
Добавим настройки авторизации в наш приватный registry в Gitlab-runner, для этого отредактируем config.toml:
где добавим параметр:
[[runners]]
environment = ["DOCKER_AUTH_CONFIG={\"auths\":{\"registry.example.com\":{\"auth\":\"bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=\"}}}"]
где "bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=" нужно заменить на хеш, который можно увидеть в файле ~/.docker/config.json
Снова отредактируем файл .gitlab-ci.yml:
Полезные команды¶
Посмотреть список загруженных репозиториев:
THE_REGISTRY=registry.example.com
# Get username:password from docker configuration. You could
# inject these some other way instead if you wanted.
CREDS=$(jq -r ".[\"auths\"][\"$THE_REGISTRY\"][\"auth\"]" ~/.docker/config.json | base64 -d)
curl -s --user $CREDS https://$THE_REGISTRY/v2/_catalog | \
jq -r '.["repositories"][]' | \
xargs -I @REPO@ curl -s --user $CREDS https://$THE_REGISTRY/v2/@REPO@/tags/list | \
jq -M '.["name"] + ":" + .["tags"][]'