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
Регистр докера — это хранилище с версионированными докер-образами.
Регистр удобно использовать для доставки приложения на сервер:
- на рабочем компьютере собираем образ и отправляем в регистр
- на виртуальном сервере забираем образ из регистра и запускаем
У докера есть официальный регистр, как сервис: 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