docker: run own private Docker Hub

Дополнительные ссылки:
Configuring a registry
Run an externally-accessible registry
Use self-signed certificates

Попробуем заинсталить свою репу образов не на localhost, а где нибудь на удаленном сервере.

1. Генерим самоподписанный серт и ключ:

cd /mnt
mkdir -p registry/certs
cd  registry/
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/billybones.key -x509 -days 365 -out certs/billybones.crt

В поле CN обязательно указать планируемое имя домена, например billybones.in:
Common Name (e.g. server FQDN or YOUR name) []:billybones.in

2. Говорим докеру доверять данному серту:

mkdir -p /etc/docker/certs.d/billybones.in:443
cp certs/billybones.crt /etc/docker/certs.d/billybones.in:443/ca.crt

Перезапускать докер не нужно.
Данное дейстиве придется проделать на всех тачках, где неоходимо будет использовать данную репу.
Или можно не копировать данные серт, а сделать так, опять же на всех тачках где планируется использовать данную репу.

3. Создаем и стартуем контейнер:

Возможно придется добавить цепоку DOCKER в таблицу nat:
iptables -t nat -N DOCKER


docker run -d \
  --restart=always \
  --name registry \
  -v /mnt/registry/certs:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/billybones.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/billybones.key \
  -p 443:443 \
  registry


Тестируем:
sudo echo "IP_АДРЕС billybones.in" >> /etc/hosts

docker pull busybox
docker image tag busybox billybones.in:443/my-busybox
docker push billybones.in:443/my-busybox
docker image rm billybones.in:443/my-busybox
docker pull billybones.in:443/my-busybox

4. Прикручиваем авторизацию

apt-get install -y apache2-utils

mkdir /mnt/registry/security
cd /mnt/registry/security

Создаем файл авторизации и учетную запись myuser с паролем mypass
htpasswd -B htpasswd myuser

Создадим папку которую будем маунтить для хранения образов в репе:
mkdir -p /mnt/registry/data

Удаляеи предыдущий контейнер и создаем новый
docker container rm -f registry

docker run -d \
  --restart=always \
  --name registry \
  -v /mnt/registry/certs:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/billybones.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/billybones.key \
  -v /mnt/registry/security:/etc/security \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/etc/security/htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  -v /mnt/registry/data:/var/lib/registry \
  -p 443:443 \
  registry


Проверяем:
Без логина не работает:
docker pull billybones.in:443/my-busybox

Логинимся:
docker login billybones.in:443
Username: myuser
Password:
Login Succeeded

В этот раз норм:
docker pull billybones.in:443/my-busybox

Разлогиниваемся:
docker logout  billybones.in:443

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *