Установка частного репозитория docker на ubuntu/debian

docker registry docker-registry репозиторий

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

Установка docker-registry

Так как Docker Registry является приложением на языке Python, то для его установки потребуется несколько инструментов и библиотек:

apt-get -y install build-essential python-dev libevent-dev python-pip liblzma-dev

Установим самую свежую версию Docker Registry:

pip install docker-registry

Пример файла конфигурации, прилагаемый к Docker Registry, можно использовать как основной для первичной настройки:

cp /usr/local/lib/python2.7/dist-packages/config/config_sample.yml /usr/local/lib/python2.7/dist-packages/config/config.yml

Создадим директорию для хранений логов:

mkdir /var/log/docker-registry

Для запуска docker-registry при старте системы создадим исполняемый файл /etc/init.d/docker-registry со следующим содержанием:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          docker-registry
# Required-Start:    nginx
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

NAME=docker-registry
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
APP=docker_registry.wsgi:application
DAEMON=gunicorn
BIND=127.0.0.1:5001
PIDFILE=/var/run/docker-registry.pid
ACCESS=/var/log/docker-registry/access.log
ERROR=/var/log/docker-registry/error.log
WORKERS=1

. /lib/lsb/init-functions

case "$1" in
  start)
        log_daemon_msg "Starting deferred execution scheduler" "$NAME"
        $DAEMON --daemon --bind=$BIND --pid=$PIDFILE --worker-class=gevent --workers=1 --max-requests 100 --graceful-timeout 3600 --timeout 3600 --access-logfile=$ACCESS --error-logfile=$ERROR $APP
        log_end_msg $?
    ;;
  stop)
        log_daemon_msg "Stopping deferred execution scheduler" "$NAME"
        killproc -p $PIDFILE $DAEMON
        log_end_msg $?
    ;;
  force-reload|restart)
    $0 stop
    $0 start
    ;;
  status)
    status_of_proc -p $PIDFILE $DAEMON && exit 0 || exit $?
    ;;
  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|status}"
    exit 1
    ;;
esac

exit 0

И выполним команду:

update-rc.d docker-registry defaults

Теперь Docker Registry можно запускать:

service docker-registry start

Настройка Nginx для работы с Docker Registry

Для управления логинами/паролями для доступа к репозиторию нам потребуется небольшая утилита:

apt-get -y install apache2-utils

Создадим пользователя (здесь и далее предполагаем, что nginx установлен в /opt/nginx/, поэтому нужно подставить свой путь):

htpasswd -c /opt/nginx/pass/docker-registry.htpasswd USERNAME

Добавить впоследствие дополнительных пользователей можно используя ту же самую команду без опции -c:

htpasswd /opt/nginx/pass/docker-registry.htpasswd ANOTHER_USERNAME

Для домена, с которого будет доступен репозиторий, необходимо получить сертификаты SSL. Для этого вполне подходят бесплатная услуга от startssl.com. После того как в наличии будут сертификат и закрытый ключ, положим их в соответствующие директории:

/etc/ssl/certs/example.com.crt - сертификат
/etc/ssl/private/example.com.key - закрытый ключ

Теперь можно создать конфигурационный файл для nginx /opt/nginx/conf/sites-available/docker-registry со следующим содержанием:

upstream docker-registry {
    server                      127.0.0.1:5001;
}

server {
    listen                      5000 ssl;
    server_name                 example.com;

    ssl_certificate             /etc/ssl/certs/example.com.crt;
    ssl_certificate_key         /etc/ssl/private/example.com.key;

    proxy_set_header Host       $http_host;
    proxy_set_header X-Real-IP  $remote_addr;

    client_max_body_size        0;

    chunked_transfer_encoding on;

    location / {
        auth_basic              "Restricted";
        auth_basic_user_file    /opt/nginx/pass/docker-registry.htpasswd;

        proxy_pass              http://docker-registry;
    }

    location /_ping {
        auth_basic off;
        proxy_pass http://docker-registry;
    }

    location /v1/_ping {
        auth_basic off;
        proxy_pass http://docker-registry;
    }
}

Создадим символическую ссылку:

ln -s /opt/nginx/conf/sites-available/docker-registry /opt/nginx/conf/sites-enabled/docker-registry

И дадим задание nginx перечить файлы конфигурации:

service nginx reload

Добавление образов в репозиторий

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

В первую очередь необходимо установить на образа метку:

docker tag testimage example.com:5000/testimage

Подключаемся к репозиторию и вводим ранее установленные логин/пароль к учетной записи и свой email:

docker login https://example.com:5000

Загружаем образ в репозиторий:

docker push example.com:5000/testimage

Скачивание образа из репозитория

Предполагаем, что в репозитории есть образ testimage, который необходимо скачать.

Подключаемся к репозиторию и вводим ранее установленные логин/пароль к учетной записи и свой email:

docker login https://example.com:5000

Скачиваем образ:

docker pull example.com:5000/testimage

Теперь образ можно использовать, например так:

docker run -it --rm example.com:5000/testimage /bin/bash
Статьи и заметки
ЛИЧНЫЙ КАБИНЕТ
На вашу почту отправлено сообщение с кодом подтверждения. Введите его для завершения регистрации.
ВЫПОЛНИТЬ