Налаштовуємо приватний Docker репозиторій

Docker одна з гарячих тем в розробці. Більшість нових проектів будується саме на Docker. Як мінімум, він відмінно зарекомендував себе для поширення, наприклад, наша система пошуку по документам Ambar встановлюється за допомогою
docker-compose
.
На початку роботи над Ambar ми використовували публічний docker репозиторій, але із зростанням проекту і появою enterprise версії ми задумалися над створенням власного приватного репозиторію. У даній статті ми поділимося своїм досвідом розгортання селф-хостед репозиторію: покроково опишемо весь процес, спробуємо обійти всі підводні камені.
Локальний docker репозиторій
Отже, найпростіший Docker репозиторій можна підняти однією командою
docker run -d -p 5000:5000 --restart=always --name ashampoo registry:2

Для перевірки репозиторію заллємо в нього образ ubuntu.
  1. Спочатку завантажити образ з офіційного репозиторію і додамо йому тег
    localhost:5000/ubuntu
    .
  2. Запушим образ в наш новий репозиторій:
    docker push localhost:5000/ubuntu
    .
Добре, тепер ми вміємо працювати з локальним docker репозиторієм. Щоб кожен раз не згадувати команду запуску репозиторію давайте створимо
docker-compose.yml
файл:
registry:
restart: always
image: registry:2
ports:
- 5000:5000 
volumes:
- /path/data:/var/lib/registry /* розділ який буде використовуватися як сховище для вашого репозиторію*/

Щоб запустити репозиторій достатньо ввести команду
docker-compose up -d
в директорії з
docker-compose
файлом. З локальним сховищем розібралися, перейдемо до налаштування SSL.
Налаштування SSL
Навіщо потрібен SSL? Docker репозиторій який доступний з інтернету повинен працювати тільки через захищене https з'єднання. Є можливість обійти це обмеження, використовувати самоподписанные сертифікати, але як показує практика це працює через раз і легше один раз налаштувати все правильно, благо для тих у кого немає SSL сертифікату я розповім як використовувати Letsencrypt. Варто згадати, що SSL є обов'язковою умовою для роботи аутентифікації в репозиторії.
Якщо у вас є SSL сертифікат — вказуємо шлях до нього в docker-compose файлі, дивіться лістинг нижче.
registry:
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
volumes:
- /path/data:/var/lib/registry 
- /path/certs:/certs /* папка де зберігається сертифікат */

Якщо ж SSL сертифікату немає — найкращий вихід використовувати Letsencrypt. В останніх версіях docker він працює з коробки без попереднього створення сертифікатів, правда робочого прикладу я ніде не знайшов, тому наведу його тут.
registry:
restart: always
image: registry:2
ports:
- 443:5000 /* важливо змінити порт з 443, інакше letsencrypt працювати не буде */
environment:
REGISTRY_HTTP_TLS_LETSENCRYPT_CACHEFILE: /cache.letsencrypt /* файл в якому буде зберігатися кеш letsencrypt*/
REGISTRY_HTTP_TLS_LETSENCRYPT_EMAIL: hello@rdseventeen.com /* email, який буде використовуватися для створення облікового запису в letsencrypt */ 
volumes:
- /path/data:/var/lib/registry 

Варто звернути увагу на те, що для коректної роботи Letsencrypt необхідно змінити порт з 5000 443. Розташування кеша Letsencrypt може бути будь-яким.
Для тестування нашого репозиторію виконаємо наступні команди:
docker pull ubuntu
docker tag ubuntu myregistrydomain.com:443/ubuntu
docker push myregistrydomain.com:443/ubuntu
docker pull myregistrydomain.com:443/ubuntu

Налаштовуємо аутентифікацію
Захистимо наш репозиторій паролем. Для цього необхідно створити файл з паролями і вказати його docker дерева. Наступна команда створить користувача
testuser
з паролем
testpassword
, помістить їх у файл і зберегти його в path/auth/htpasswd.
docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > path/auth/htpasswd

У docker-compose вкажемо шлях до файлу з паролями і використання basic аутентифікації
registry:
restart: always
image: registry:2
ports:
- 443:5000
environment:
REGISTRY_HTTP_TLS_LETSENCRYPT_CACHEFILE: /cache.letsencrypt
REGISTRY_HTTP_TLS_LETSENCRYPT_EMAIL: hello@rdseventeen.com
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
volumes:
- /path/data:/var/lib/registry
- /path/auth:/auth

Для того, щоб зміни вступили в силу, необхідно перезапустити docker репозиторій. Використовуємо команду
docker-compose restart
. Логинимся створений в репозиторій за допомогою команди
docker login myregistrydomain.com:443
. Після цього наш репозиторій буде доступний для скачування зберігаються в ньому образів.
Підсумок
У статті ми розглянули створення приватного docker репозиторію. Для глибокого вивчення теми рекомендую ознайомитися з офіційним мануалом і списком налаштувань репозиторію.
Дякую за увагу!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.