Система управления контейнерами Docker¶
Docker - клиент-серверная система управления контейнерами. Контейнер - это технология запуска приложений в изолированном окружении.
Описание¶
Docker удобно использовать для решения следующих задач:
- Развертывания легко переносимых веб-приложений, баз данных и сервисов.
- Запуска программного обеспечения, требующего разных дистрибутивов GNU/Linux.
- Создания легковесных PaaS окружений.
Docker запускает контейнер из файлов специального формата, называемых “образами”. При запуске Docker создаёт в ОЗУ файловую систему bootfs, которая обеспечивает монтирование из образа корневой файловая системы rootfs (Debian, Ubuntu, CenOS …). Файловая система rootfs монтируется «только для чтения». После запуска контейнера, поверх этой файловой системы монтируется файловая система на запись.
Установка¶
MS Windows¶
Контейнеры Windows возможно использовать только в Windows10 Профессиональная и Windows10 Корпоративная (Anniversary Edition). В его рамках вы сможите установить Docker для Windows и запустить контейнеры необходимые для выпонения лабораторных работ.
Для использования контейнеров Windows Server требуется изоляции Hyper-V в Windows 10, чтобы разработчики получили одинаковую версию ядра и конфигурации, которая будет использоваться применяться в рабочей среде.
Необходима система под управлением Windows 10 Anniversary Edition или Creators Update (Профессиональная или Корпоративная). На самом деле это все можно сделать и на виртуальной машине Windows10, однако при этом нужно включить вложенную виртуализацию. Чтобы контейнеры Windows работали, необходимо установить критические обновления. Чтобы узнать версию ОС: * Запустите winver.exe и сравните указанную версию с версией в журнале обновлений Windows10. * Убедитесь, что у вас установлена версия 14393.222 или более поздняя, перед тем как продолжить установку. Скачайте Docker для Windows и запустите программу установки. Сделать это можно на сайте с подробной инструкцией от Docker непсрественно. Не забудьте перезагрузить систему после установки Docker. После перезагрузки запускаем приложение Docker for Windows. Тут необходимо пройти авторизацию по профилю на Docker Hub. Собственно все, после этого можно приступать к запуску контейнеров через командную строку Windows.
Ubuntu¶
Обновите индекс пакетов:
sudo apt-get update
Теперь можно загрузить и установить пакет Docker. Добавьте в систему GPG-ключ репозитория Docker:
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 \
--recv-keys 58118E89F3A912897C070ADBF76221572C52609D
Добавьте этот репозиторий в APT:
echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main"
sudo tee /etc/apt/sources.list.d/docker.list
Обновите индекс пакетов:
sudo apt-get update
Следующая команда позволяет переключиться из репозитория Ubuntu 16.04 в репозиторий Docker:
apt-cache policy docker-engine
Обратите внимание: пакет docker-engine пока не установлен. Версия пакета может отличаться.
Чтобы установить Docker, введите:
sudo apt-get install -y docker-engine
После этого программа Docker будет установлена; также это запустит демона и настроит автозапуск процесса. Чтобы убедиться в том, что программа работает, запросите её состояние:
sudo systemctl status docker
Настройка команды docker (опционально)¶
По умолчанию команда docker требует привилегий root (или доступа к команде sudo). Также её можно запускать в группе docker, которая создаётся автоматически во время установки программы Docker.
Если вы попытаетесь запустить команду docker без префикса sudo и вне группы docker, вы получите ошибку:
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
Чтобы вам не пришлось набирать префикс sudo каждый раз когда вам нужно запустить команду docker, добавьте своего пользователя в группу docker:
sudo usermod -aG docker $(whoami)
Чтобы активировать это изменение, выйдите из системы и войдите снова.
Чтобы добавить в группу docker пользователя, который не является текущим, укажите в команде его имя:
sudo usermod -aG docker username
Основные команды¶
Использование команд:¶
Docker установлен и готов к работе. Использование команд docker заключается в передаче ряда опций и команд с аргументами. Базовый синтаксис имеет такой вид:
docker [option] [command] [arguments]
Чтобы просмотреть все подкоманды, введите:
docker
В процессе работы вам может понядобятся такие команды как(формат docker [команда] [опция/имя контейнера]):
ps - Список активных контейнеров;
ps -a - Список всех контейнеров;
ps -l - Список недавно созданных контейнеров;
start - Запускает один или несколько остановленных контейнеров;
stop - Останавливает контейнер;
exec - Выполняет команду в запущенном контейнере (docker exec -it [имя контейнера] /bin/bash;
run - Выполняет команду в новом контейнере;
search - Поиск образа (serch [имя_образа]);
image - Список образов;
image rm - удаляет образ(необходимо для обновления образа).
Опции команды run, которые могут пригодится в работе:
-i - запускает контейнер в интерактивном режиме;
-t - запускает псевдотерминал, часто используется с -i (-ti);
-v - пробрасывает директорию файловой системы внутрь контейнера [адрес_директории куда_в_контейнере_поместить];
--rm - удаляет контейнер после выхода из него;
--privileged - дает все привелегии контейнеру, а также снимает все ограничения контроллера cgroup.
Создание Dockerfile¶
Настройка контейнера:¶
- Прежде всего, мы должны написать инструкцию, по которой Docker должен сформировать образ (image), на основе которого будет работать наше приложение — Dockerfile. Этот файл должен носить имя “Dockerfile” и должен быть размещен в репозитории с лабораторной работой. В него помещается вся информация о контейнере, а именно:
- Указываем имя образа ОС;
- Автора образа и его email;
- Обновляем и очищаем;
- Устанавливаем пакеты необходимые для выполнения лабораторной работы;
- Создание пользователя student и установка паролей;
- Определяем каталог монтируемый с хоста в образ;
- Добавляем файлы для выполнение лабораторной работы внутри контейнера;
- Размещаем адрес скрипта, выводящего на экран отчет и запускающий bash;
- Ну и порт для проброса на хост.
- Теперь немного о скрипте в нем необходимо указать всего два действия:
- Это команда cat и адрес расположения протокола лабораторной работы
- Команда запуска bash /bin/bash
Сборка контейнера Build¶
Сборка образа локально:
docker build -t [имя образа]
Запуск контейнера:
docker run -ti --rm --privileged [имя образа]
Dockerhub и auto-build¶
Автоматическая сборка и обновление образов из GitHub или Bitbucket, непосредственно на Docker Hub. Эта функция работает посредством добавления commit hook вашего GitHub или Bitbucket репозитория, вызывая сборку и обновление когда вы делаете выгрузку коммита (push).
- Создайте Docker Hub аккаунт и авторизуйтесь.
- Свяжите GitHub или Bitbucket аккаунт со связанными аккаунтами и сервисами.
- Выберите «Create Automated Build» из выпадающего меню «Create».
- Выберите GitHub или Bitbucket проект с Dockerfile по которому будет осуществляться сборка.
- Выберите ветку из которой будет осуществляться сборка (по умолчанию ветка master).
- Дайте имея автоматической сборки.
- Назначьте тег для сборки.
- Укажите местоположение Dockerfile, по умолчанию.
Когда автоматическая сборка настроена, через несколько минут она будет произведена и вы сможете увидеть ее на Docker Hub. Синхронизация с GitHub и Bitbucket будет оставаться активной, пока вы ее не отключите.
Что бы проверить состояние репозитория с автоматической сборкой, кликните по названию репозитория «Your Repositories». Автоматическая сборка помечена специальной иконкой после названия репозитория. В странице сведений о репозитории, вы можете нажать на вкладке «Build Details» для просмотра состояния и всех сборках, произведенных в Docker Hub.
После того как вы создали автоматическую сборку ее можно отключить или удалить. Однако вы не можете выгружать в автоматическую сборку изменения с помощью команды docker push. Вы можете только управлять ей делая коммит кода в репозитории GitHub или Bitbucket.
Вы можете создать несколько автоматических сборок для репозитория и сконфигурировать для них собственные Dockerfile или Git ветки.
Автоматическая сборка также может быть вызвана через URL на Docker Hub. Это позволяет произвести автоматическую сборку по требованию.