среда, 8 февраля 2017 г.

Приватный registry для docker с let's encrypt и http basic auth

Появилась необходимость держать репозиторий с докер образами локально.

Супер секретные, все дела.

Короткая шпаргалка.

1. Получаем сертификат от let's encrypt.

На этой неделе мой любимый способ это getssl на баше (https://github.com/srvrco/getssl).

Два чая это господину, а то его конкуренты пытаются 50 модулей питона использовать для этой задачи.

./getssl -c domain.com
Правим конфиг по подсказкам и
./getssl domain.com
В крон ставим
getssl -a -q -u 
раз в пару недель.

2. Качаем образ registry:2
 docker pull registry:2
3. Создаем пароли для наших юзеров

mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd
4. Запускаем всё вместе

docker run -d -p 5000:5000 --restart=always --name registry \
  -v `pwd`/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -v /path/.getssl/domain.com:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.com.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.com.key \
registry:2
5. Пробуем с клиентской машины
docker login domain.com
и оно не работает у меня потому как мне в дебиан не завезли ещё корневой сертификат от let's encrypt.
Чинится это просто
scp domain.com:.getssl/domain.com/chain.crt ./
sudo  mv chain.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
6. Тегируем образ
docker tag oldtag domain.com:5000/newtag
7. Заливаем
docker push domain.com:5000/newtag

Так как у меня образы все для хранения не предназначены а только для распространения, и я их из могу на build машине все пересоздать, я не волнуюсь о хранении образов в s3 или ещё где.
Но если вас это волнует. то обратите внимание что в этой инструкции о сохранности данных не побеспокоились.