Быстрый запуск и использование своего открытого docker-registry

в 18:47, , рубрики: docker, docker-registry, виртуализация, ит-инфраструктура

Docker – это программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации (см. Википедию).
Подробные инструкции по установке есть на официальном сайте: https://docs.docker.com/engine/installation/

Если вы читаете эту статью, то вероятно уже знакомы с докером и готовы сделать следующий шаг — поднять свой собственный регистр для удобной доставки приложений на продакшен-сервера.

Когда я начал делать новый проект — решил попробовать использовать докер. Получилось четыре контейнера, которые надо как-то доставлять на сервер. Далее последует рассказ о том, что у меня из этого получилось.

Что имеется на входе:

  • виртуальный сервер с IP-адресом (без домена) на Ubuntu 14.04 64bit с docker@1.10.3 — здесь мы будем поднимать регистр и здесь же забирать из него образы
  • рабочий компьютер на OS X 10.11.3 с docker@1.9.1 и docker-machine@0.5.5

Регистр докера — это хранилище с версионированными докер-образами.
Регистр удобно использовать для доставки приложения на сервер:

  1. на рабочем компьютере собираем образ и отправляем в регистр
  2. на виртуальном сервере забираем образ из регистра и запускаем

У докера есть официальный регистр, как сервис: https://hub.docker.com
Там можно размещать неограниченное количество публичных образов и только один приватный. Большее количество приватных образов можно добавлять за отдельную плату.

Другой вариант использования регистра — поднятие собственного.
Докер предоставляет официальный образ с сервером регистра, кроме того есть документация с инструкциями по запуску.

Регистр докера способен работать как по http, так и по https. При использовании защищённого соединения возможна так же авторизация отдельных пользователей. Но нужен сертификат, который можно купить только для доменного имени. Самоподписанный сертификат у меня так и не получилось заставить работать (читал в интернетах, что с этим есть проблемы). Ввиду того, что у меня нет доменного имени — мы рассмотрим открытый регистр с доступом по http. Это значит, что если кто-то узнает адрес вашего регистра — он сможет свободно им пользоваться.

Запуск регистра

Настройка на сервере

Регистр представляет из себя докер-контейнер, который запускается одной командой:

› docker run -d -p 5000:5000 --restart=always --name registry registry:2

Готово, но для того, чтобы клиент докера на этом сервере мог обращаться к регистру по открытом соединению без авторизации — нужно добавить строчку в конфигурационный файл /etc/default/docker:

DOCKER_OPTS="$DOCKER_OPTS --insecure-registry <ip-адрес сервера>:5000"

После чего нужно перезапустить докер:

› service docker restart

Настройки на клиенте

У меня на компьютере для работы докера используется система виртуализации VirtualBox, в которой запускается boot2docker (минимальный образ Linux с докером), который в свою очередь работает с контейнерами. Виртуальных машин, работающих под VirtualBox на компьютере может быть несколько, для управления ими используется docker-machine.

Для того, чтобы можно было обращаться к регистру по открытому соединению без авторизации — нужно добавить опцию в конфигурационный файл, который лежит внутри виртуальной машины, под которой работают контейнеры.

Посмотрим список виртуальных машин:

› docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER   ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.9.1

Подключимся к нашей виртуальной машине:

› docker-machine ssh default

В ней есть файл /var/lib/boot2docker/profile, в котором присутствует такой фрагмент:

EXTRA_ARGS='
--label provider=virtualbox
'

Открываем его на редактирование с sudo, чтобы получилось так:

EXTRA_ARGS='
--label provider=virtualbox --insecure-registry <ip-адрес сервера>:5000
'

Использование регистра

Формирование и отправка образа с рабочего компьютера

Представим, что у вас в текущей директории уже есть Dockerfile и мы можем просто собрать новый образ с именем my-image:

› docker build -t my-image .

Теперь можно добавить образу тег и отправить его в регистр:

› docker tag my-image <ip-адрес сервера>:5000/my-image:latest
› docker push <ip-адрес сервера>:5000/my-image:latest

Получение образа на сервере

Сейчас образ в регистре, мы можем получить его на сервере и запустить:

› docker pull <ip-адрес сервера>:5000/my-image:latest
› docker run -d <ip-адрес сервера>:5000/my-image

Заключение

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

Автор: tenorok

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js