Швидкий запуск і використання свого відкритого 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 ashampoo 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

Висновок
Отже, ми підняли власний відкритий регістр для зберігання докер-образів і розглянули приклад відправлення-отримання образу з його допомогою.
Сподіваюся, що це буде комусь корисно, тому що мені такого керівництва дуже не вистачало.

Джерело: Хабрахабр

0 коментарів

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