Содержание
Docker
Предисловие
Docker - это ПО, заточенное под Linux и для Linux. В настоящее время есть реализация docker для Windows, MacOS, FreeBSD, но все эти реализации изначально ущербны (то есть имеют ограниченный функционал) и работают при поддержке виртуализации на хостовой системе.
Соответственно, при организации рабочего docker-окружения избежать слоя виртуализации никак нельзя. Итак, процесс «докеризации» разбивается на три логические части:
- Установить гостевую linux-систему на FreeBSD
- Настроить взаимодействие между хостом и гостевой системой.
- Настроить docker в гостевой системе.
Установка гостевой системы
В качестве гостевой системы будем использовать Alpine linux.
Создаем том с именем alpine размером 8G в zfs-пуле guests:
alpha# zfs create -V8G -o volmode=dev guests/alpine
Также создаем том, в котором будем хранить данные докера ( будем монтировать этот том в систему )
alpha# zfs create -V64G -o volmode=dev guests/dockerdata
Загружаем актуальный образ диска:
alpha# wget http://dl-cdn.alpinelinux.org/alpine/v3.8/releases/x86_64/alpine-virt-3.8.0-x86_64.iso
Убеждаемся, что сетевые интерфейсы настроены правильно или же настраиваем их:
alpha# sysctl net.link.tap.up_on_open=1 alpha# ifconfig tap1 create alpha# ifconfig bridge0 create alpha# ifconfig bridge0 addm em0 addm tap1 alpha# ifconfig bridge0 up
Если состояние должно быть перманентным, то:
alpha# echo "net.link.tap.up_on_open=1" >> /etc/sysctl.conf alpha# echo 'if_bridge_load="YES"' >> /boot/loader.conf alpha# echo 'if_tap_load="YES"' >> /boot/loader.conf alpha# sysrc cloned_interfaces="bridge0 tap1" alpha# sysrc ifconfig_bridge0="addm em0 addm tap1" alpha# sysrc kld_list="nmdm vmm"
Здесь em0 - имя сетевого интерфейса хоста.
Устанавливаем систему из образа:
alpha# kldload vmm alpha# pkg install bhyve-firmware alpha# bhyve -APH -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,/dev/zvol/guests/alpine -s 4:0,virtio-blk,/dev/zvol/guests/dockerdata \ -s 5:0,ahci-cd,iso-images/alpine-virt-3.8.0-x86_64.iso -c 2 -m 4G -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd -l com1,stdio alpine
Далее, загрузившись в систему выполняем настройку с помощью утилиты setup-alpine. Перезагружаемся.
alpha# bhyve -APH -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,/dev/zvol/guests/alpine \ -s 4:0,virtio-blk,/dev/zvol/guests/dockerdata -c 2 -m 4G -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd -l com1,stdio alpine
Завершаем настройку, создаем нового пользователя. Также форматируем диск под данные докера.
theta# fdisk /dev/vdb && mkfs.ext4 /dev/vdb1
Монтируем раздел.
…И переходим к установке и настройке docker.
Настройка хоста для работы с Docker
Настроим вход в систему по ключу. Для этого сначала поправим конфигурационный файл демона sshd:
alpine# vi /etc/ssh/sshd_config
чтобы в нем присутствовали строки
PermitRootLogin prohibit-password PasswordAuthentication no
Публичный ключ пропишем в файле /root/.ssh/authorized_keys:
alpine# mkdir .ssh alpine# chmod 0700 .ssh alpine# vi .ssh/authorized_keys
Управлять виртуальными машинами мы будем с помощью ansible, поэтому установим python:
alpine# apk add python