Packages for Linux and Unix
Error: Your browser was not able to display this page.
How to solve this problem
- Install any modern browser (Chrome, Firefox, Safari, Edge, Opera, etc.);
- Update the browser to the latest available version;
- Disable extensions that block Cookies, JavaScript or Ads in your browser;
Connection
- IP: 178.175.141.223
- Date: 2024-01-08 19:08:47
- User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
- Error code: 403
If you think it’s our fault, please email to lystor@gmail.com
This website uses cookies
We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners who may combine it with other information that you’ve provided to them or that they’ve collected from your use of their services.
See Privacy Policy for details. I agree
Создание собственного base-образа Docker с ОС Linux

Обновлено: 12.07.2022 Опубликовано: 09.04.2022
Используемые термины: Docker, Операционная система. Для Docker мы можем найти большое количество готовых базовых образов на основе различных операционных систем. Но если нужного нам нет, то предусмотрен механизм создания своего собственного имиджа. Рассмотрим процесс подробнее на базе систем Astra Linux (Deb) и РЕД ОС (RPM).
Предварительная подготовка
Прежде чем начать, выполним следующие действия: 1. Развернуть систему, на которой мы будем делать образ. Нам подойдет виртуальная машина на любой системе виртуализации или контейнер Docker. Для Astra Linux лучше развернуть тот же дистрибутив и делать образ на нем, для РЕД ОС используем дистрибутив на основе Red Hat — CentOS. 2. Поставить на установленную систему Docker Engine. Подробнее в инструкции Установка Docker на Linux. После выполнения данных шагов, мы готовы переходить, непосредственно, к работам по созданию базовых образов. У нас есть на выбор 2 способа: с помощью специализированной утилиты или обычного архиватора tar. Рассмотрим оба варианта.
Создание образа с помощью bootstrap
Лучше всего использовать Debootstrap/Yumbootstrap. Данный инструмент позволяет установить базовую операционную систему в обычный каталог. Нам необходима данная процедура перед импортом чистой системы в Docker — это позволит убрать все лишнее и существенно снизить объем будущего образа. В нашем примере используются два принципиально разных дистрибутивов Linux. Рассмотрим процедуры по отдельности. У каждой есть свои тонкости, в чем-то проще Astra Linux, а в чем-то — РЕД ОС.
Astra Linux
Для систем на базе Debian установка выполняется командой:
apt install debootstrap
Теперь выполняем развертывание чистой системы в каталог:
debootstrap 1.7_x86-64 astra-folder https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/
- 1.7_x86-64 — имя скрипта из каталога /usr/share/debootstrap/scripts для установки системы. Прежде чем запускать команду, стоит пройти по данному каталогу и найти имя нужного вам скрипта. Это одна из причин, почему стоит создавать docker-образ в той же системе — нужного нам скрипта может не оказаться (маловероятно, что скрипт для Astra Linux будет в Rocky Linux).
- astra-folder — имя локального каталога, куда будет установлена система.
- https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main — путь к репозиторию, откуда нужно взять базовые пакеты. Данная опция необязательна, однако в случае с Astra Linux, debootstrap пытается найти пакеты в репозиториях debian, что приводит к ошибке.
Считаю важным рассказать про еще один нюанс, касающийся Astra Linux. В моем случае вышевведенная команда завершалась ошибкой из-за отсутствия некоторых файлов so. Чтобы решить проблему, во время ее выполнения нужно открыть второй сеанс консоли и скопировать файлы из системы в каталог установки, например:
* в нашем случае это 2 файла — libparsec-base.so.3 и libparsec-aux.so.3.
Утилита debootstrap загрузит минимальный набор пакетов с репозитория и выполнит установку системы в указанном нами каталоге.
Если нужно доработать нашу систему — установить дополнительные пакеты или загрузить файлы, выполняем все действия относительно созданного каталога. В нашем примере:
Теперь создаем образ для Docker:
tar -C astra-folder -c . | docker import — astra-se1.7:base
* где astra-folder — созданный каталог с установленной системой; astra-se1.7:base — название и версия образа.
Готово. Посмотреть список образов можно командой:
РЕД ОС
Для yumbootstrap на момент обновления инструкции не было готового пакета RPM, однако, автор программного продукта позаботился, чтобы можно было легко собрать свой пакет.
Но и тут есть нюанс — на системе РЕД ОС сборка не проходит, а сам пакет работает с ошибкой, поэтому мы и выбрали в качестве рабочей системы CentOS.
Устанавливаем набор утилит:
yum install rpm-build git make python-setuptools
Перейдем в каталог, где будем выполнять сборку:
git clone https://github.com/dozzie/yumbootstrap.git
Переходим в загруженный каталог yumbootstrap:
rpmbuild —rebuild yumbootstrap-*.src.rpm
И устанавливаем его:
yum localinstall ~/rpmbuild/RPMS/noarch/yumbootstrap-*.el7.noarch.rpm
Первый шаг сделан. Следующая проблема — для РЕД ОС нет описания создания образа в папку. Сами описания хранятся в каталоге /etc/yumbootstrap/suites. Мы можем посмотреть, как они выглядят и создать свой по аналогии. Что мы и сделаем.
name = Red OS
release = 7.3
[post_install]
finalize = scripts/fix_rpmdb.py
finalize = scripts/clean_yumbootstrap.py
[repositories]
redos = https://repo1.red-soft.ru/redos/7.3/$basearch/os
redos-updates = https://repo1.red-soft.ru/redos/7.3/$basearch/updates
* обратите внимание, что наш файл подразумевает, что мы создаем образ для РЕД ОС версии 7.3.
Теперь создаем файл со списком устанавливаемых пакетов:
coreutils
bash
grep
gawk
basesystem
rpm
initscripts
iproute
less
make
mktemp
vim-minimal
yum
chkconfig
plymouth
rootfiles
redos-release
* данный набор был взят из списка для centos7. Заменена строка centos-release на redos-release.
Создаем файл с GPG-ключом:
——BEGIN PGP PUBLIC KEY BLOCK——
Version: GnuPG v2.0.22 (GNU/Linux)
mQENBFkemaABCADg8mX2EBmcmh+tu+rtQPPLiaDXjTZhQfJV6FwsrSYucMCfNBNL
UYRMrcUNfXYjYvAtis9jwJCE+CGrJ1ir5cqttTGZu+hq7S1DGZjYR6VaflrwXVa9
o//GsA7azDNpZ88LkyQ+u9BgiNY67jzQ4jdpUnSX9JLczVfoS31JH6Pb0UgtJtKf
EoP60vOI+an7J4n7fVJYV/J37SKpECB2HIg0ODloHlm/8ISiMdYppusDLMD96nmy
YW9LLddu5isFy9G9A7202Hj9oXziIF0I9+jv0lGqc2gGAQfgWypaUHdAONht9Xmr
91T6YUJX/djbfCdyLGqwy1UO40QRB9bLYhsTABEBAAG0NlJFRCBTT0ZUIChSRUQg
U09GVCBycG0gc2lnbiBrZXkpIDxzdXBwb3J0QHJlZC1zb2Z0LnJ1PokBOQQTAQIA
IwUCWR6ZoAIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEAtX8Wf4rBju
J90IAJbxj1XnNoATbTcrI0wIUU6mNQsvU9Ag9UoLc01gy5JQffv9euecqnbxMEyr
kMD51TFMjmlexjB2BBpsc3KzjISguOoT2Rwi6h0NzKQtlh4IvG13d+QNkjtxGRW5
qOIW/I/plCRg5aZZLG4xEoVynzf1vMfJ/y4oTm5V8+DM2A3i6DORcUf8D+VZZnPB
R9Z2U750u3sfdqKa+uEbA1tqZgk9TdRMmtxB328u8OTRt864g4mvmvJLUuAQ82vj
NbfbdqCg9vKIqvth/m6OldcmHk6x0DDHK1Of9WONF37d6KUz+a68EiU9awulYagK
UYq+i83Y4FPXiHAVvCjtPzwjjzi5AQ0EWR6ZoAEIALSgyev59CmBdB/aTotGHNGx
ZnZ7skW4gUajlOfbH8OHQWwW+prlE+apSaSBo7mbMhf9LcXvPwVIGHzYWk32wYwh
zXjt/NJwOo3SXTG4IUfTbwC3831MA6WjhWlXtBXypUpq3LcQkyOT0kzzIrw0hPxC
DlpJerWAEKxJcgfu41C4mfq28Oay1JutNWT45lDSRzZA3PaVUpb2bQ7ohplF9E9H
VejsvTEhgSdyJh301KaqyMvTmaZpFZaiy7GjV18GI/fGfFZM4kENkcUp37GC1f64
NjgLYntgQ/vplL3dTO1tNV0nAbWtZO64Mg5Gbme0dt97BJicgmJXlZJrqKtMV80A
EQEAAYkBHwQYAQIACQUCWR6ZoAIbDAAKCRALV/Fn+KwY7t/YCADOlIVdMYNlrEPB
Mn6U+IbVHuEStaZfnRYjur9XDCyWEI965yN1/UJ40aH4jHlG2Y0Ka7Vep6uP0Zto
Q0gAHcn+CI38YBegnjs9pomUSopDm3L7jx7hVKRr0z6b0gPEKUXSWxaLa9f0/k6/
DY3kVSvxF8cdY9jstVQuGeC04dfZdJKDyc0ZXNKd6WC+ABLiI0+Vk08xrWR81H8T
B4gFLG0U0EMNkjq5u8sygCL7YL0/YebaiMSDtSuSX2JXnkDDwThQ6p2Fas4Csmxm
7OvuZQIYYZUgurPbRsMYDHiDA8jhCEkpxxnz5RMMF0/9sUXtcvnU3sPdGObHg1tY
+ulLukIs
=QS0H
——END PGP PUBLIC KEY BLOCK——
* содержимое для данного файла мне не удалось найти и Интернете, поэтому я установил РЕД ОС нужной версии, и посмотрел последовательность в файле /etc/pki/rpm-gpg/RPM-GPG-KEY-RED-SOFT. Данная последовательность может быть не актуальной, поэтому вам может понадобиться проделать ту же операцию.
Мы готовы, чтобы запустить процесс создания образа в каталоге. Вводим команду:
yumbootstrap redos-7.3 redos-folder
* где redos-7.3 — имя созданного нами suite-файла; redos-folder — каталог, куда будет развернута наша система.
Утилита yumbootstrap загрузит набор пакетов, указанных в файле redos-7.3.list и выполнит установку системы в указанный нами каталог.
Если нужно доработать нашу систему — установить дополнительные пакеты или загрузить файлы, выполняем все действия относительно созданного каталога. В нашем примере:
chroot redos-folder bash
После работы, не забываем выйти из окружения chroot:
Теперь создаем образ для Docker:
tar -C redos-folder -c . | docker import — redos-7.3:base
* где redos-folder — созданный каталог с установленной системой; redos-7.3:base — название и версия образа.
Готово. Посмотреть список образов можно командой:
Для запуска контейнера на основе образа вводим:
docker run -it —rm redos-7.3:base bash
Создание образа с помощью tar
В инструкции был рассмотрен способ с правильной подготовкой образа и использованием его. Если есть причина не использовать инструмент Debootstrap/Yumbootstrap, то можно создать более грубый образ с использованием tar. Такой образ будет иметь, куда, больший размер, но в некоторых случаях это может быть не принципиально.
Работа должна выполняться в системе, из которой мы сделаем образ. Набор команд одинаковый и не зависит от дистрибутива Linux, поэтому мы рассмотрим его только для Astra Linux. При желании, мы можем заранее установить необходимые инструменты или наоборот, чтобы образ занимал меньше места, удалить некоторые пакеты и файлы.
После вводим команду:
tar —numeric-owner —exclude=/proc —exclude=/sys -cf astra-base.tar /
* где astra-base.tar будет именем tar-файла с нашей системой. В него попадет содержимое всех каталогов, кроме /proc и /sys.
И создаем образ:
cat astra-base.tar | docker import — astra-se1.7:1
* где astra-base.tar — созданный тарбол; astra-se1.7:1 — имя образа, который будет создан.
Мы должны увидеть что-то на подобие:
REPOSITORY TAG IMAGE ID CREATED SIZE
astra-se1.7 1 0998166e59a1 57 seconds ago 993MB
Читайте также
Вам также может оказаться полезным:
What is the equivalent packages build-essential and linux-headers- in alpine?
I want to build kernel modules in Alpine; I know how to do it in Ubuntu.
In Ubuntu, I used to install kernel headers by running:
apt install -y build-essential linux-headers-$(uname -r)
What is the equivalent in Alpine? I searched on the web and Github user progrium wrote a comment that the equivalent for build-essential is build-base , but what about the linux-headers-$(uname -r) ?
66.9k 35 35 gold badges 116 116 silver badges 253 253 bronze badges
asked Feb 9, 2022 at 6:47
383 8 8 silver badges 20 20 bronze badges
1 Answer 1
build-base is indeed the equivalent to build-essential .
The package providing the headers and scripts needed to build kernel modules is the -dev package matching your kernel package, e.g. linux-lts-dev .
answered Feb 9, 2022 at 7:19
Stephen Kitt Stephen Kitt
426k 55 55 gold badges 1105 1105 silver badges 1198 1198 bronze badges
You must log in to answer this question.
- ubuntu
- apt
- kernel-modules
- alpine-linux
- pkg
-
The Overflow Blog
Related
Hot Network Questions
Subscribe to RSS
Question feed
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2024 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2024.1.8.3130
Linux is a registered trademark of Linus Torvalds. UNIX is a registered trademark of The Open Group.
This site is not affiliated with Linus Torvalds or The Open Group in any way.
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Install build-base on Alpine Linux
Build-base is pretty much the same as the build-essentials in Debian-based systems. It will provide the tools needed for building the kernel modules. Let’s see how to install build-base on Alpine Linux.
Prerequisites
- Alpine Linux
Install build-base on Alpine Linux
Step 1. Update the apk packages.
sudo apk update
Step 2. Install build-base .
sudo apk add build-base
Conclusion
Feel free to leave a comment below and if you find this tutorial useful, follow our official channel on Telegram.