sonyps4.ru

H Зачем использовать Alpine в качестве основы docker-образа в черновиках. Открыл для себя Ansible и Alpine Linux Ссылки для скачивания Alpine Linux

Alpine Linux объяснить проще. Это линукс на musl и busybox. Чуть менее минималистичный и менее упоротый, чем TinyCore. Годится для всяких служебных виртуалок и контейнеров, от которых не требуется ни глибц-шной полноценности, ни арчевского обилия хипсторского ПО.

Ansible - это configuration management over SSH. Собственно, механизм для массового копирования по sftp и запуска скриптов. Большинство из готовых скриптов на python2, поэтому на кореосе (где вырезан не только перл, но и питон) приходится приседать (скриптом).

Хорош тем (в отличие от puppet и salt), что

а) можно использовать для установки софта на свежекупленные дешёвые VPS
б) "центр управления" практически неуязвим для атак

Дешёвые VPS (я говорю о ценах в разы ниже достаточно демпингующего DigitalOcean) в 100% (известных мне) случаев не поддерживают third-party images и даже SSH keys. Т.е. по-старинке как в 90-е сервер закупается вручную в шоппинг-карте и приходит емейл с адресом и рутовым паролем. Как правило, стоит панель вроде SolusVM, предоставляющая сервис переустановки и recovery console, и всё.

Ansible позволяет, по-крайней мере, теоретически, на такой говносервер ни разу вручную не заходить. Потому что работает поверх голого SSH - никакого софта не требуется на управляемых хостах.

"Центр управления" Ansible основное время (когда конфигурация не меняется) вообще в оффлайне, а когда в онлайне - не слушает порты и может быть скрыт за NAT, работать под нерутом и достаточно легко зацементирован средствами Mandatory Access Control. А секреты лежать в ссш-агенте. Т.е. поверхность атаки очень мала, и надо суметь скрыть атаку от интерактивно присутствующего администратора. Конечно, тут есть много "но" - например, могут какие-то операции выполняться скриптами, что потребует постоянно запущенного демона, но всё равно обеспечить принцип минимальных привилегий легче, чем у конкурентов.

Вдобавок Ansible не требует постоянной работы дополнительных демонов на управляемых хостах. Но мне это как раз не критично - главное, что отсутствует постоянное постукивание в центр, и не слушаются дополнительные порты.

Puppet и Salt же:

а) имеют центральный сервер, постоянно находящийся в сети и доступный для exploitation. Причём сервер засекурен не через OpenSSH, а через самописные хипсторские сервера, что существенно повышает вероятность zero-day.

б) требуют для работы бутстрапа (вручную или с помощью инструментов, аналогичных Ansible) - установки агента и постоянной его работы в качестве демона.

Паппет с приседаниями можно заставить работать без центрального сервера. Но это не рекомендовано для массового деплоя, поскольку много надо писать самому. А в ансибле это основной поддерживаемый сценарий.

Короче, надо теперь смотреть, сможет ли ансибле поменять локаль:) Ну, и учить их кукбуки - может это окажется полной парашей (в стиле chef) говорят, более-менее то же самое по сравнению с довольно сияющими декларативностью, идемпотентностью и augeas из паппета.



Если вы хотите, чтобы ваши приложения запускались быстрее, а docker-образ был меньше, тогда вам стоит попробовать Alpine в качестве базового образа.

Уже давно не секрет, что Docker часто использует Alpine в качестве базового образа для официальных docker-образов. Эта тенденция началась в начале 2016 года. Сейчас почти каждый официальный docker-образ имеет тег Alpine.

Но вряд ли будет так, что вы проснетесь одним прекрасным утром и подумаете: “О! А почему бы мне не использовать другую ОС для всех своих образов”. Тем более, когда до этого по умолчанию официальным образом был Debian. И позиции его были весьма прочными.

Вы всегда можете выбрать docker-образы на основе Debian. Но лучшее ли это решение?

Почему Alpine?

Звучит, конечно, интересно. Но что это значит для тех, кто регулярно использует Docker?

Главное преимущество - сжатие размеров

Если вы используете Docker, то вы должны стремиться к этому сжатию. Благодаря этому ваш docker-образ будет меньше.
Apline 3.6 весит всего 3,98 мб.

Вот сравнение с другими дистрибутивами:

Получается, что Alpine в 25 раз меньше Debian’а.

Всего с Docker Hub были сделаны уже миллионы пулов. Немного покопавшись с его публичным API, можно увидеть, что у Debian 45 275 515 пулов, в то время как у Alpine -целых 397 152 768 (по состоянию на 10.10.2017).

Уменьшение образа на 100 мб может иметь большое значение.

В реально используемых веб-приложениях, в которых установлено множество пакетов, можно заметить 2-3 - кратное уменьшение конечного образа с Alpine. Экономия этих 100 мб останется всегда, вне зависимости от того, что встроено в ваш образ.

Сравним размер некоторых образов на основе Alpine и разных версиях Debian:

  • Redis на основе alpine весит 27,5 мб, а на jessie - 107 мб
  • Python на основе alpine- 89 мб, а на основе jessie - 690 мб
  • Golang на основе alpine - 270 мб, а на основе stretch- 733 мб

Конечно, если вы захотите использовать образ в реальном приложении, вам надо будет установить несколько зависимостей, поставить необходимые библиотеки и т.д через dockerfile. Все это приведет к “утяжелению” dockerfile’а. Но даже если сравнивать конечный dockerfile на основе debian и alpine, то последний будет легче.

Образ на Alpine следует использовать, когда конечный образ должен быть как можно меньше. Чтобы образы на основе Alpine были меньше, туда не включены такие инструменты, как git или bash. Если вы используете Alpine в качестве основы образа, то для установки необходимых вам пакетов их нужно добавить в dockerfile.

Alpine быстрый

Уменьшение размеров не единственное преимущество использования маленьких docker-образов.

Изначально цель была, чтобы система запускалась из RAM. То есть, это “одноразовая” система, которая переустанавливается после каждого перезапуска. И это отлично вписывается в концепцию контейнеров.

Да, такими дистрибутивами, как Debian или Ubuntu пользовать легче, но они слишком большие и медленные по сравнению с Alpine. apt-get update тратит столько же времени на обновление списка актуальных пакетов, сколько Alpine тратит на установку или обновление всей системы. В Alpine используется свой менеджер пакетов apt-tools (ничего общего с форматом.apk в Android). Apk расшифровывается как “alpine package keeper”. Поскольку Alpine должен быть очень легкой системой, то нужен очень быстрый менеджер пакетов. В одном интервью один из разработчиков Alpine говорил: “Мы рассматривали pacman от arch linux, также deb, ipkg, .rpm и другие. Но приняли решение использовать свой менеджер пакетов, руководствуясь требованием “run-from-ram”.

Alpine безопасный

Еще одно преимущество того, что образ не занимает много пространства, заключается в том, что не так много целей для атаки.
Когда в системе мало пакетов и библиотек, шанс того, что что-то пойдет не так заметно снижается.

Для обеспечения безопасности системы разработчики делают упор не на фикс багов, которые привели к уязвимости, а делают все, чтобы эти баги не появились. В ядре системы минимально компонентов. В Alpine не устанавливается ничего, чем пользователи никогда не будут пользоваться. Например, BashShell. Вместо него используется по умолчанию используется BusyBox Bash. Кроме того, Alpine предоставляет блоки, из которых пользователь сам собирает то, что ему надо. Во многих дистрибутивах дела обстоят иначе: многие компоненты включены по умолчанию, и пользователям приходится самостоятельно отключать некоторые компоненты, чтобы обеспечить безопасность системы. И если находится библиотека, которая по мнению разработчиков более безопасна, то они ее меняют. Так они заменили OpenSSL на LibreSSL, т.к. по мнению разработчиков Alpine, эта библиотека является более безопасной.

Несколько лет назад существовал bash-эксплойт, который позволял получить контроль над машиной, если она поражена так называемым “Shellshock”. Alpine таким атакам не был подвержен, так как по умолчанию bash там не установлен.

Установка пакетов на Alpine

Как я уже писал, для управления пакетами в Alpine используется apk. И некоторых пакетов, которые вам будут нужны, по умолчанию не будет в Alpine. Придется ставить их самостоятельно. Названия пакетов для Debian и Alpine будут отличаться. Например, чтобы установить пакет, который в Debian называется libpq-dev, в Alpine надо прописать apk add postgresql-dev.

Используйте лучший инструмент для работы

Alpine он делает все, чтобы быть легким и безопасным дистрибутивом. Поэтому использование Alpine в качестве основы для Docker-образа является оптимальным решением.

P.s. Спасибо моим коллегам из

The design goal for Alpine Linux is to provide a secure and lightweight distribution, which should cater the needs of most of the Linux users. It is based on musl and BusyBox; today Alpine Linux 3.2.1 has been released, in this article we will be reviewing the noteworthy features of this Linux distribution and the installation process for this latest release.

Alpine Linux is extremely lightweight Linux distro, full installer package is around 300 MB only and it consumes very low amount of computer resources; ideally, a small and fast Linux operating system. It comes with its own Package Manager for the installation of new packages; known as APK. It uses OpenRC init system and the way packages are compiled for this distribution, adds extra layer of security to the operating system.

Here are the release notes for this new version. Its includes many bug fixes with respect to security and Musl.

Installing Alpine Linux 3.2.1

Alpine does not have a rich graphical installer like majority of the other Linux distributions, it has a text based installer, but it is pretty easy to use and install alpine Linux.

There are couples of ways through which you can initiate the install of this OS.

(a) Download Alpine Linux 3.2.1 and burn it to DVD/USB drive and boot your system using this DVD/USB.

(b) Create Virtual machine on your current operating system using tools like and boot your Virtual machine using ISO of this operating system.

Whichever method you choose, here is the very first screen you should see when booting your system using this ISO.

Here simply type “root” and hit Enter. It will take you to the command line of this operating system. Run following command here to initiate the install of this operating system.

It will immediately start the installation process, on very first step, it will let you specify your Keyboad layout.

Hit Enter once done, Type the computer hostname on next step and hit Enter.

Specify Ethernet interface for your computer on next step.

Here, it will let you set root password for your new installation, enter the password twice.

Select your time zone from this step, in order to keep the default choice, just hit Enter.

If you are using any proxy for internet browsing, specify that here.

Now choose mirror for the package manager, specify whichever location is closet to you, so that package manager should work faster on your system.

Select the hard disk you want to perform this installation on.

That’s it, it will take few minutes to complete the installation. Reboot your system once done and start using new Alpine release.

Conclusion

As you might have noticed, new release focuses on bug fixes and security hardening. It is a suitable operating system to run on your old computer having limited resources. The installers for new release are available in both 32 and 64-bit architectures. You can also try its “minimum” installation package, which is just 88 MB in size.

Please follow and like us:



Загрузка...