Raspberry pi docker что это
Как установить и использовать Docker на Raspberry Pi
Docker — это платформа контейнеризации, которая позволяет быстро создавать, тестировать и развертывать приложения в виде переносимых самодостаточных контейнеров, которые могут работать практически где угодно.
В этом руководстве мы объясним, как установить Docker на Raspberry Pi, и изучим основные концепции и команды Docker.
Подготовка
Установите Docker на Raspberry Pi
Для установки Docker на Raspberry Pi достаточно выполнить несколько команд.
Сначала загрузите сценарий установки Docker, используя следующую команду curl :
После завершения загрузки выполните сценарий, набрав:
Сценарий обнаружит дистрибутив Linux, установит необходимые пакеты и запустит Docker.
Этот процесс может занять несколько минут, и когда он будет завершен, скрипт выведет информацию о версии Docker и о том, как использовать Docker как пользователь без полномочий root.
Вот и все. Docker установлен на вашу плату Pi.
Выполнение команды Docker без Sudo
По умолчанию только пользователь с правами администратора может выполнять команды Docker.
Чтобы запускать команды Docker от имени пользователя без полномочий root без добавления sudo вам необходимо добавить своего пользователя в группу docker, которая создается во время установки. Для этого по типу:
$USER — это переменная среды, в которой хранится ваше имя пользователя.
Выйдите из системы и войдите снова, чтобы членство в группе обновилось.
Чтобы убедиться, что вы можете запускать команды docker без sudo выполните следующую команду, которая загрузит тестовое изображение, запустит его в контейнере, напечатает сообщение «Hello from Docker» и выйдет:
Результат будет выглядеть примерно так:
Как использовать Docker
Теперь, когда Docker настроен на вашем Raspberry Pi, давайте рассмотрим основные концепции и команды докеров.
Образы Docker
Образ Docker состоит из ряда слоев файловой системы, представляющих инструкции в файле Dockerfile образа, которые составляют исполняемое программное приложение. Изображение — это неизменяемый двоичный файл, включающий приложение и все другие зависимости, такие как библиотеки, двоичные файлы и инструкции, необходимые для запуска приложения.
Контейнеры Docker
Экземпляр изображения называется контейнером. Контейнер представляет среду выполнения для отдельного приложения, процесса или службы.
Возможно, это не самое подходящее сравнение, но если вы программист, вы можете думать об образе Docker как о классе, а контейнер Docker — как об экземпляре класса.
Контейнер Debian остановится сразу же после загрузки, потому что у него нет длительного процесса и никакой другой команды не предоставляется. Контейнер загрузился, запустил пустую команду и завершил работу.
-it позволяет вам взаимодействовать с контейнером через командную строку. Чтобы запустить интерактивный контейнер, введите:
Если у вас нет работающих контейнеров, вывод будет пустым.
Чтобы удалить один или несколько контейнеров, просто скопируйте идентификатор контейнера (или идентификаторы) и вставьте их после команды container rm :
Выводы
Если у вас есть вопросы, оставьте комментарий ниже.
Создаём систему развертывания приложений с помощью Docker
1. Что такое Docker
Возможно не все знакомы с системами развертывания. Поэтому я поясню.
Также вы можете где-нибудь увидеть слова «Docker» и «виртуализация» в одном предложении, это не значит что Docker эмулирует процессор, память, ядро ОС и т.д., виртуализация происходит на уровне ядра т.е. все «виртуализируемые» им процессы являются реальными процессами вашей ОС.
Как вы уже догадались можно придумать массу применений. Например, вы собираетесь сделать кластер Raspberry Pi, который будет майнить биткоины (кстати, это нерентабельно в наши дни) и на каждую из 1000 имеющихся в арсенале плат вы должны установить и настроить один и тот же софт. Да, можно скомпилировать свой образ ОС, но это во-первых не так быстро, во-вторых это не так гибко (конфигурация чуть-чуть поменялась и надо пересобирать весь образ ОС).
Или, например, вы хотите распространять ваше приложение под несколько модификаций одноплатных компьютеров: Rpi1, Rpi2, O-droid, Rpi3. Везде одна и та же структура приложения, один и тот же исполняемый код, но конфигурация отличается. Вы можете создать 3,4 отдельных мануала для пользователей по установке и настройке, а потом вам это надоест и вы создадите N различных, уже настроенных конфигураций вашего приложения под самые популярные платформы и будете распространять их виде контейнеров.
Или вы просто захотели поделиться с другом, с подписчиками данного сайте вашим приложением для которого уже не нужно ставить библиотеки, пакеты и прочее. Потребуется собрать для них контейнер.
Это то что я придумал навскидку. На самом деле Docker это очень-очень мощный инструмент, применений ему можно найти неограниченное количество.
Самым большим плюсом является то, что развернуть контейнер можно на абсолютно любой другой машине где установлен Docker.
Ладно, вводная часть что-то слишком затянулась. Перейдем к делу.
2. Установка
Если вы устанавливаете систему с нуля, то возможно рациональнее воспользоваться уже готовым образом от команды Hypriot.
Большинство пользователей не будет переустанавливать систему из-за того что хотят попробовать Docker. Поэтому ниже будет приведен процесс установки на Raspbian.
0. Если у вас старая версия Raspbian, обновляемся до новой т.к. с версии Debian 8 появилась поддержка ядра Docker «из коробки»:
1. На официальном сайте отсутствует мануал с описанием установки на Raspberry Pi, но команда Hypriotпроделала большую работу по автоматизации установки Docker на Raspberry. Воспользуемся плодами их труда:
Ленивые могут воспользоваться готовыми пакетами от Hypriot:
2. Проверка работоспособности
Выведет информацию о версии, количестве контейнеров, версии ядра, драйверов и т.д.
3. Теперь любое приложение, которое есть в виде docker-контейнера для ARM, можно устанавливать с помощью docker run на Raspberry Pi.
Следующая команда скачает и развернёт небольшой уже настроенный веб-сервер:
Список контейнеров можно посмотреть с помощью
3. Использование
Можно, конечно, описывать основные команды и прочее, но за этим лучше обращаться к документации.
Поэтому мы рассмотрим на примере.
Предположим мы хотим собрать контейнер в котором будет веб сервер NGinx и PHP 5.4.
В начале пишется инструкция по сборке образа. Листинг файла с комментариями приведен ниже.
Далее команды supervisord для запуска наших приложений:
Полный список команд с пояснениями доступен по ссылке.
Теперь, используя эту инструкцию, собираем образ iloverpi.ru.
Образ iloverpi.ru надо запустить, тем самым создав контейнер. Помимо этого требуется связать 80 порт хоста с 80 портом контейнера. Для удобства и полноты примера также свяжем /var/www хоста и /var/www контейнера.
Убеждаемся что контейнер запущен:
Имя контейнера не было указано явно, поэтому он получил автоматическое название, с помощью которого мы можем с ним взаимодействовать.
У меня вывод предыдущей команды выглядит так:
Для взаимодействия с командной строкой контейнера существует команда
После этого станет доступно обычное приглашение командной строки. Это и будет консоль нашего контейнера.
Итак, мы собрали и развернули свой контейнер, научились с ним взаимодействовать.
Статья получилась длинной, но надеюсь Вам было интересно. До новых встреч.
Как поднять свой сервер на RaspberryPI на основе docker
Сказ о том, как я настраивал сервисы в docker на Raspberry PI и почему это, возможно, не лучшая идея.
Введение (или как всё начиналось)
Началось всё очень давно пару лет назад. Так уж вышло, что я оказался в Китае и надо было как-то связываться с внешним миром. Сторонним VPN и прокси я не очень доверял, поэтому решил поднять DigitalOcean со своим прокси. Так уж вышло, что со временем сервер с прокси оброс разными разностями: от файлового хранилища ( Syncthing ) до CI ( Jenkins ).
По возвращении в Россию было принято решение уходить с DO на какой-то self-hosting. Покупать для этого отдельный сервер не хотелось — дорого, да и пока незачем, по этой причине взял Raspberry PI 4B. Естественно, пришлось переносить все основные сервисы с DO на эту машинку, о чем и будет данный пост.
Вводные
Необходимо было настроить следующие сервисы:
Проблемы и нюансы
Сразу хотелось бы рассказать про проблемы, которые возникали по ходу сборки всего этого дела и/или возникают сейчас:
Готовка
Само собой, в первую очередь необходимо подготовить флешку Micro SD 16GB (или большего объема) с системой Raspbian. Подробнее об этом есть на официальном сайте.
Дальше всё достаточно интуитивно. Во время установки мне предлагалось два основных варианта установки: с GUI и без. Я ставил с GUI, но после настройки ssh GUI мне больше не понадобился.
Подготовка Флешки(ек)
Флешки я готовил через Elementary OS с GUI (GParted и утилита disks) и небольшим количеством консоли. Вкратце, алгоритм следующий:
ВНИМАНИЕ, ПОДОБНЫЕ МАНИПУЛЯЦИИ УДАЛЯЮТ ВСЕ ФАЙЛЫ С УСТРОЙСТВ. ВЫБИРАЙТЕ ЦЕЛЕВЫЕ УСТРОЙСТВА АККУРАТНО
Вкратце — задача отформатировать флешки в формате ext4 и зашифровать с помощью LUKS.
Далее будет достаточно простая процедура добавления файлов для открытия флешек. Это нужно будет, чтобы RaspberryPI могла автоматически подключать устройства. Делаем следующее:
Примечание: Далее /dev/sdb1 — адрес раздела, который мы записывали из Device
Во время исполнения последней команды вам потребуется ввести пароль.
ВАЖНО: не потеряйте файл во время настройки и НИКОМУ не передавайте его.
Повторяем вышеописанные действия для второй флешки, если необходимо. Обязательно сохраняем файл(ы)-ключи и запоминаем/записываем пароли
Подготовка плацдарма Raspberry PI
После корректной установки системы, необходимо её донастроить:
Настраиваем монтирование флешек
Переносим файлы-ключики для флешек (например, в папку /root/cryptfiles ; в дальнейшем она будет использована как пример)
В файл /etc/crypttab добавляем запись в формате:
В файл /etc/fstab добавляем запись в формате
Повторить для второй флешки, если есть
Щепотка скриптов для Nginx
.NET Core + Docker на Raspberry Pi. А это законно?
Эту статью написал Скотт Хансельман. Передаю ему слово.
Мне нравится Raspberry Pi. Это отличные компактные обучающие машины, и дети очень любят с ними играть. Даже если эти дети — взрослые, и они создают кластер из шести узлов Kubernetes Raspberry Pi.
NET Core теперь поддерживается в дистрибутивах Linux ARM32, например Raspbian и Ubuntu!
Примечание. Первые три тега multi-arch и bionic для Ubuntu 18.04. Кодовое название stretch для Debian 9. Поэтому я использую 2.1-sdk, и он нормально работает на моем RPi, но я могу быть более конкретным, если захочу.
Вот он скачивает образ…
Разные процессоры! Но с мультиархитектурными тегами от Кендры Хэйвенс из Microsoft все отлично работает в версии 2.1.
Docker имеет функцию мультиархитектурности, которую недавно начали использовать в microsoft/dotnet-nightly. В ближайшее время планируется перенести это на официальный репозиторий microsoft/dotnet. Функция мультиархитектурности позволяет использовать один тег для нескольких конфигураций машины. Без этой функции для каждой архитектуры/ОС/платформы потребуется уникальный тег. Например, тег microsoft/dotnet:1.0-runtime основан на Debian, а microsoft/dotnet:1.0-runtime-nanoserver на Nano Server. С мультиархитектурностью будет необходим лишь один общий тег microsoft/dotnet:1.0-runtime. Если взять этот тег из контейнерной среды Linux, то получится образ на основе Debian, тогда как если взять его из контейнерной среды Windows, то получится образ на основе Nano Server. Это помогает обеспечить единообразие тегов в среде Docker, что позволяет избежать путаницы.
В приведенных выше примерах я могу делать следующее:
В качестве небольшого примера, здесь я перейду в контейнер и добавлю небольшое консольное приложение и запущу его, просто чтобы доказать, что это возможно. Все будет удалено, когда я выйду из контейнера.
Если вы попробуете сами, то заметите, что команда «dotnet run» выполняется медленно. Это потому, что она выполняет восстановление, сборку и запуск. Компиляция проходит не слишком быстро на этих крошечных устройствах. Поэтому стоит делать как можно меньше работы. Вместо того чтобы все время запускать «dotnet run», я выполню команду «dotnet build», а затем «dotnet exec», которые выполняются очень быстро.
Оптимизация размера контейнера
ARM32 / RASPBERRY PI
Перевод реального ASP.NET сайта на Docker с тестами!
Могу ли я перевести свой сайт с подкастами на Docker, а также собрать/тестировать/запустить его на Raspberry Pi? Да!
Видите, там есть дополнительный раздел, с именем «testrunner», а затем после него «test?» Этот раздел не работает. Он устанавливает ENTRYPOINT, но этим никто никогда не пользуется… пока. ENTRYPOINT является неявным запуском, если находится в последней строке в файле Docker. Так сделано для того, чтобы я мог его найти, если захочу.
Я могу просто построить его и запустить вот так:
Заметка. Обратите внимание, что образ «runtime» — это microsoft/dotnet: 2.1-aspnetcore-runtime, а не microsoft/dotnet: 2.1-runtime. Также aspnetcore one предварительно включает в себя двоичный код, который нужен для запуска приложения ASP.NET, таким образом я могу просто включить одну ссылку на «/>» в csproj. Если не использовать базовый образ aspnetcore-runtime, то пришлось бы вручную активировать все пакеты ASP.NET Core, которые мне нужны. Использование базового образа может сделать финальные файлы образов больше, но это всего лишь баланс между удобством и размером. Решать вам. Вы можете вручную включить только нужные вам пакеты или использовать метапакет «Microsoft.AspNetCore.App» для удобства. Мой конечный образ «podcast» весил 205 мегабайт, что неплохо, но, конечно, если бы я хотел, я мог бы уменьшить его несколькими способами.
Только посмотрите! Это результаты тестирования, которое выполнялось в контейнере Linux:
Вот и результат. Теперь у меня есть сайт подкастов, работающий в Docker на ARM32 Raspberry Pi 3, и я потратил на работу (написание файла Docker) всего лишь один час!
Да здравствует кросс-платформенность!
🧦 Как запустить Docker на Raspberry Pi
Вам больше не нужно тратить часы на сборку и запуск нового программного обеспечения.
Благодаря Docker вы можете легко устанавливать и запускать отдельные приложения, предварительно настроенные и готовые к работе.
Это идеально подходит для программного обеспечения, которое в противном случае может занять некоторое время для запуска и сборки, например веб-сервер или инструмент облачного резервного копирования.
Добавьте к этому Raspberry Pi, и вы сможете настроить свой новый проект IoT за считанные минуты.
Давайте мы объясним, как вы можете запустить Docker на Raspberry Pi.
Установка Docker
Перед установкой Docker мы предположим, что вы знаете, как настроить Raspberry Pi с операционной системой на основе Linux, такой как Raspbian, и что вы уже сделали это.
Для всех, у кого не установлена последняя версия Raspbian (Raspbian Buster) или если вы используете другой дистрибутив Linux, откройте окно терминала и выполните следующую команду, чтобы начать установку:
К сожалению, для тех, кто использует Raspbian Buster, вы можете столкнуться с проблемами при установке с помощью приведенного выше скрипта.
Если это так, запустите следующую команду, чтобы использовать «nightly» версии Docker:
Имейте в виду, однако, что эти версии могут быть нестабильными, поэтому рекомендуется соблюдать осторожность.
Как только это будет завершено, и если вы не работаете под пользователем root (чего на самом деле делать не следует!), введите следующую команду, чтобы предоставить вашей учетной записи пользователя доступ к группе пользователей Docker:
Измените «pi» на свое пользователя, если вы изменили по умолчанию пользователя.
Чтобы проверить правильность установки Docker, введите следующее:
Это загрузит и запустит очень простое сообщение Docker-контейнера «hello world» в окне вашего терминала.
Если вы видите сообщение, подобное показанному выше, Docker должен быть готов к использованию.
Вы также можете запустить sudo docker info, чтобы увидеть полный и подробный список вашей конфигурации Docker.
Поиск и установка Docker контейнеров
После установки Docker следующим шагом будет установка контейнеров Docker.
Контейнеры – это автономные сервисы, которые вы можете запустить.
Многие из контейнеров, которые вам могут понадобиться, можно найти в Docker Hub, официальном хранилище Docker для контейнерных приложений.
Некоторые официальные программные контейнеры, такие как WordPress или PHP, являются «Официальными образами Docker».
Они сертифицированы Docker, что означает, что вы можете быть уверены в том, что можете их загружать и использовать.
Другие предоставляются третьими лицами, поэтому будьте осторожны, если вы планируете использовать их для чего-то деликатного.
Чтобы установить контейнер, найдите соответствующий пакет в Docker Hub и следуйте инструкциям.
Используйте команду pull для загрузки контейнера.
Например, если вы хотите загрузить Apache для запуска собственного веб-сервера Raspberry Pi, вам нужно будет набрать:
Чтобы загрузить и запустить Apache напрямую, введите:
После этого будут загружены соответствующие файлы перед запуском Apache с использованием конфигурации по умолчанию, доступной для вас по адресу http://pi-ip-address: 8080.
Возможно, вы захотите создать свой собственный Dockerfile (файл конфигурации Docker), если вы настраивали веб-сервер для производственного использования, следуя руководству Apache Docker Hub.
Docker упрощает развертывание IoT-приложений
С Docker вам может потребоваться некоторое время, чтобы разобраться, если вы создаете свои собственные контейнеры, но с помощью Docker Hub довольно просто использовать готовые контейнеры.
Комбинируйте Docker с Raspberry Pi (или несколькими), и вы можете использовать контейнеры для быстрого развертывания нового программного обеспечения.
Это отлично подходит для пространства IoT, где у вас может быть несколько устройств, нуждающихся в одном программном обеспечении, с одинаковой конфигурацией.
Есть много причин, по которым Docker и IoT идут вместе, поэтому дайте нам знать, для чего вы планируете использовать Docker.
Хотите запустить веб-сервер или собираетесь создать собственную систему домашней автоматизации?