ALT Container OS: различия между версиями
Keremet (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
Строка 16: | Строка 16: | ||
[[Ручное обновление ALTCOS]]<br> | [[Ручное обновление ALTCOS]]<br> | ||
[[Подготовка конфигурационного файла ignition]]<br> | [[Подготовка конфигурационного файла ignition]]<br> | ||
== Работа с контейнерами в ALTCOS == | |||
ALT Container OS поддерживает два основных режима работы с контейнерами:<br> | |||
* серверный — демон dockerd с клиентским приложением docker; | |||
* бессерверный — клиентское приложение podman. | |||
<br> | |||
Серверный вариант позволяет клиентским приложениям (docker, ...) работать с демоном dockerd как локально, так и удаленно через REST-интерфейс, но считается менее защищенным, чем бессерверный вариант podman.<br> | |||
Бессерверный вариант podman, появившийся относительно недавно, выполняет функции сервера и работает напрямую с файловой системой.<br> | |||
Оба клиентских приложения имеют похожий набор команд, но хранят образы и контейнеры в различных каталогах. Образы, скачанные приложением docker, недоступны приложению podman и наоборот.<br> | |||
<br> | |||
Серверный вариант (docker, dockerd) удобен для проектов с небольшим числом запускаемых сервисов (не более десятка). <br> | |||
Он позволяет запускать как отдельные контейнеры, так и по YML-файлу описания стеки сервисов как на одном сервере (через docker-compose), так и на кластере серверов (docker stack).<br> | |||
<br> | |||
Бессерверный вариант (podman) позволяет запускать отдельные контейнеры и может (как и серверный вариант) использоваться в кластере kubernetes.<br> | |||
=== Примеры работы в режиме docker === | |||
==== Запуск контейнера ==== | |||
Скачайте базовый образ платформы p8 alt:p8: | |||
$ docker pull alt:p8 | |||
latest: Pulling from library/alt | |||
86bd305d9be6: Pull complete | |||
006b17da3256: Pull complete | |||
Digest: sha256:c4eb4ad40440b7c3297c14c91048aa07cbe2534f9e629f4bc9b0d113ca57821f | |||
Status: Downloaded newer image for alt:latest | |||
docker.io/library/alt:latest | |||
Запустите каманды echo и cat в контейнере образа: | |||
$ docker run --rm -i alt:p8 sh -c "echo -ne 'Привет из docker-контейнера '; cat /etc/altlinux-release" | |||
Привет из docker-контейнера ALT p8 starter kit (Hypericum) | |||
==== Пример работы в режиме docker-compose ==== | |||
В данном примере разворачивается стек из двух сервисов: | |||
* postgres — сервис базы данных postgres 13-й версии; | |||
* pgadmin — административный WEB-интерфейс для работы с сервером. | |||
Для запуска сервиса административного интерфейса используется официальный образ dpage/pgadmin4. <br> | |||
Для запуска сервера базы данных используется образ kafnevod/alt.p8-postgres:13, собранный на базе образа alt:p10. <br> | |||
Для сборки образа kafnevod/alt.p8-postgres:13 использовался следующий Dockerfile:<br> | |||
FROM alt:p10 | |||
ENV PGPASS=q1w2e3 | |||
RUN \ | |||
apt-get update; \ | |||
apt-get install -y postgresql13-server; | |||
RUN \ | |||
echo -ne "$PGPASS\n$PGPASS\n" | su -s /bin/sh -l postgres -c 'initdb --pgdata="/var/lib/pgsql/data" --locale="ru_RU.UTF-8" -U postgres -W'; \ | |||
sed -i -e "/^#listen_addresses/a\ | |||
listen_addresses = '*'" /var/lib/pgsql/data/postgresql.conf; \ | |||
echo "host all all 0.0.0.0/0 md5" >> /var/lib/pgsql/data/pg_hba.conf | |||
CMD exec su -c "/usr/bin/postgres -D /var/lib/pgsql/data $POSTGRES_PARAMS" -s /bin/sh postgres | |||
<br> | |||
В переменной PGPASS задается пароль администатора базы данных postgres. После установки пакета postgresql13-server в файлах конфигурации включается прием соединения по протоколу TCP/IP и авторизацию md5.<br> | |||
===== Файл docker-compose.yml для запуска сервисов: ===== | |||
В файле docker-compose.yml для сервера базы данных задается именованный том для хранения базы данных, а также логин и пароль для работы с административным интерфейсом: | |||
version: "3" | |||
services: | |||
postgres: | |||
image: kafnevod/alt.p8-postgres:13 | |||
volumes: | |||
- DB:/var/lib/pgsql/data | |||
pgadmin: | |||
image: dpage/pgadmin4 | |||
environment: | |||
- PGADMIN_DEFAULT_EMAIL=test@altcos.altlinux.org | |||
- PGADMIN_DEFAULT_PASSWORD=Secret | |||
ports: | |||
- 80:80 | |||
volumes: | |||
DB: | |||
===== Запуск сервисов ===== | |||
Сервисы запускаются командой docker-compose: | |||
$ docker-compose up -d | |||
Creating network "docker-compose_default" with the default driver | |||
Creating volume "docker-compose_DB" ис запцскается в виртуальном with default driver | |||
Creating docker-compose_postgres_1 ... done | |||
Creating docker-compose_pgadmin_1 ... done | |||
===== Настройка и работа с pgadmin4 через WEB-интерфейс ===== | |||
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):<br> | |||
[[Файл:ALTCOS examples pgadmin.png|безрамки]]<br> | |||
В поле Login введите значение переменной _PGADMIN_DEFAULT_EMAIL, в поле пароля значение переменной PGADMIN_DEFAULT_PASSWORD файла docker-compose.yml.<br> | |||
[[Файл:ALTCOS examples pgadmin2.png|безрамки]]<br> | |||
В закладке General в поле Name введите имя базы данных: postgres.<br> | |||
[[Файл:ALTCOS examples pgadmin3.png|безрамки]]<br> | |||
В закладке Connection | |||
* в поле Host введите имя сервиса postgres файла docker-compose.yml; | |||
* в полях Maintenance database, Username имя базы (postgres) и имя пользователя (postgres) | |||
* в поле Password значение переменной PGPASS файла Dockerfile. | |||
После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных.<br> | |||
[[Файл:ALTCOS examples pgadmin4.png|безрамки]] | |||
=== Пример работы в режиме podman === | |||
Скачайте образ fanux/tetris | |||
$ sudo podman pull --all-tags fanux/tetris | |||
Trying to pull docker.io/fanux/tetris:latest... | |||
Getting image source signatures | |||
Copying blob 08d48e6f1cff done | |||
Copying blob abf1e846b79b done | |||
Copying blob 92f626025fce done | |||
Copying blob 5bd1005002cc done | |||
Copying config 82f6127899 done | |||
Writing manifest to image destination | |||
Storing signatures | |||
82f61278995f8c959b38174bc66bc053289cbb68cc47b2edca1ff10fafe28828 | |||
Запустите игру | |||
$ sudo podman run --rm -it fanux/tetris game | |||
[[Файл:ALTCOS examples tetris.png|безрамки]] | |||
=== Установка описанных примеров при развертывании ALTCOS === | |||
Использовав во время установки ignition-файл https://altcos.altlinux.org//configs/ignition/testContainers.ign | |||
(butane-файл https://altcos.altlinux.org//configs/butane/testContainers.btn) | |||
Вы в каталоге ''/opt/'' получаете развернутое дерево для запуска описанных примеров. | |||
<source> | |||
/opt/altcos/ | |||
`-- examples | |||
`-- docker | |||
|-- docker | |||
| `-- hello.sh | |||
|-- docker-compose | |||
| |-- docker-compose.yml | |||
| |-- start.sh | |||
| `-- stop.sh | |||
`-- podman | |||
`-- tetris.sh | |||
</source> | |||
* ''/opt/altcos/examples/docker/docker'' - скрипт ''hello.sh'' запуска контейнера; | |||
* ''/opt/altcos/examples/docker/docker-compose'' - файл описания сервисов ''docker-compose.yml'' и с | |||
крипты запуска и остановки сервисов; | |||
* ''/opt/altcos/examples/podman/tetris.sh'' - скрипт запуска контейнера игры ''tetris'' через ''podman''. |
Версия от 08:56, 11 октября 2021
ALT Container OS (ALTCOS) — дистрибутив на основе пакетной базы ALT Linux, являющий аналогом Fedora CoreOS, имеющий следующие особенности:
• минимальный набор пакетов для поддержки контейнеризации (docker, podman); • монолитность — атомарные обновления с возможностью отката на предыдущую версию; • поддержка потоков, отличающихся по репозиториям ALT Linux и архитектурам. На данный момент (27.09.2021) поддерживается только поток altcos/x86_64/sisyphus (архитектура x86_64, репозиторий sisyphus). В дальнейшем планируется добавить потоки для других архитектур и репозитория p10; • автоматическое развертывание на множестве (виртуальных) машин без участия оператора; • поддержка различных режимов автоматического обновления дистрибутива без участия оператора, в том числе режима с согласованной перезагрузкой узлов кластера, при которой кластер сохраняет свою работоспособность.
Обновления ALTCOS выполняются с помощью ostree, что позволяет обновить систему целиком за одно действие и при необходимости загрузиться в предыдущее состояние.
Во время установки для первоначальной настройки используется технология ignition (https://coreos.github.io/ignition/getting-started/). Она позволяет, предварительно описав шаблоны конфигурации (пользователей, сетевые настройки, запускаемые сервисы, …) в ignition-файлах, без участия оператора разворачивать систему на множестве серверов локальной сети или облака.
В ALTCOS есть специальный пользователь altcos, включенный в группы docker и wheel, то есть имеющий право запускать команды docker и sudo. Во время первоначальной настройки через ignition можно установить пароль пользователям altcos и root.
В настоящее время (27.09.2021) ALTCOS можно установить с помощью ISO-образа или при помощи ignition настроить QCOW2.
В дальнейшем планируется поддержка установки в различные облачные среды, а также сетевой установки с использованием PXE.
Автоматическое обновление ALTCOS
Ручное обновление ALTCOS
Подготовка конфигурационного файла ignition
Работа с контейнерами в ALTCOS
ALT Container OS поддерживает два основных режима работы с контейнерами:
- серверный — демон dockerd с клиентским приложением docker;
- бессерверный — клиентское приложение podman.
Серверный вариант позволяет клиентским приложениям (docker, ...) работать с демоном dockerd как локально, так и удаленно через REST-интерфейс, но считается менее защищенным, чем бессерверный вариант podman.
Бессерверный вариант podman, появившийся относительно недавно, выполняет функции сервера и работает напрямую с файловой системой.
Оба клиентских приложения имеют похожий набор команд, но хранят образы и контейнеры в различных каталогах. Образы, скачанные приложением docker, недоступны приложению podman и наоборот.
Серверный вариант (docker, dockerd) удобен для проектов с небольшим числом запускаемых сервисов (не более десятка).
Он позволяет запускать как отдельные контейнеры, так и по YML-файлу описания стеки сервисов как на одном сервере (через docker-compose), так и на кластере серверов (docker stack).
Бессерверный вариант (podman) позволяет запускать отдельные контейнеры и может (как и серверный вариант) использоваться в кластере kubernetes.
Примеры работы в режиме docker
Запуск контейнера
Скачайте базовый образ платформы p8 alt:p8:
$ docker pull alt:p8 latest: Pulling from library/alt 86bd305d9be6: Pull complete 006b17da3256: Pull complete Digest: sha256:c4eb4ad40440b7c3297c14c91048aa07cbe2534f9e629f4bc9b0d113ca57821f Status: Downloaded newer image for alt:latest docker.io/library/alt:latest
Запустите каманды echo и cat в контейнере образа:
$ docker run --rm -i alt:p8 sh -c "echo -ne 'Привет из docker-контейнера '; cat /etc/altlinux-release" Привет из docker-контейнера ALT p8 starter kit (Hypericum)
Пример работы в режиме docker-compose
В данном примере разворачивается стек из двух сервисов:
- postgres — сервис базы данных postgres 13-й версии;
- pgadmin — административный WEB-интерфейс для работы с сервером.
Для запуска сервиса административного интерфейса используется официальный образ dpage/pgadmin4.
Для запуска сервера базы данных используется образ kafnevod/alt.p8-postgres:13, собранный на базе образа alt:p10.
Для сборки образа kafnevod/alt.p8-postgres:13 использовался следующий Dockerfile:
FROM alt:p10 ENV PGPASS=q1w2e3 RUN \ apt-get update; \ apt-get install -y postgresql13-server; RUN \ echo -ne "$PGPASS\n$PGPASS\n" | su -s /bin/sh -l postgres -c 'initdb --pgdata="/var/lib/pgsql/data" --locale="ru_RU.UTF-8" -U postgres -W'; \ sed -i -e "/^#listen_addresses/a\ listen_addresses = '*'" /var/lib/pgsql/data/postgresql.conf; \ echo "host all all 0.0.0.0/0 md5" >> /var/lib/pgsql/data/pg_hba.conf CMD exec su -c "/usr/bin/postgres -D /var/lib/pgsql/data $POSTGRES_PARAMS" -s /bin/sh postgres
В переменной PGPASS задается пароль администатора базы данных postgres. После установки пакета postgresql13-server в файлах конфигурации включается прием соединения по протоколу TCP/IP и авторизацию md5.
Файл docker-compose.yml для запуска сервисов:
В файле docker-compose.yml для сервера базы данных задается именованный том для хранения базы данных, а также логин и пароль для работы с административным интерфейсом:
version: "3" services: postgres: image: kafnevod/alt.p8-postgres:13 volumes: - DB:/var/lib/pgsql/data pgadmin: image: dpage/pgadmin4 environment: - PGADMIN_DEFAULT_EMAIL=test@altcos.altlinux.org - PGADMIN_DEFAULT_PASSWORD=Secret ports: - 80:80 volumes: DB:
Запуск сервисов
Сервисы запускаются командой docker-compose:
$ docker-compose up -d Creating network "docker-compose_default" with the default driver Creating volume "docker-compose_DB" ис запцскается в виртуальном with default driver Creating docker-compose_postgres_1 ... done Creating docker-compose_pgadmin_1 ... done
Настройка и работа с pgadmin4 через WEB-интерфейс
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):
В поле Login введите значение переменной _PGADMIN_DEFAULT_EMAIL, в поле пароля значение переменной PGADMIN_DEFAULT_PASSWORD файла docker-compose.yml.
В закладке General в поле Name введите имя базы данных: postgres.
В закладке Connection
- в поле Host введите имя сервиса postgres файла docker-compose.yml;
- в полях Maintenance database, Username имя базы (postgres) и имя пользователя (postgres)
- в поле Password значение переменной PGPASS файла Dockerfile.
После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных.
Пример работы в режиме podman
Скачайте образ fanux/tetris
$ sudo podman pull --all-tags fanux/tetris Trying to pull docker.io/fanux/tetris:latest... Getting image source signatures Copying blob 08d48e6f1cff done Copying blob abf1e846b79b done Copying blob 92f626025fce done Copying blob 5bd1005002cc done Copying config 82f6127899 done Writing manifest to image destination Storing signatures 82f61278995f8c959b38174bc66bc053289cbb68cc47b2edca1ff10fafe28828
Запустите игру
$ sudo podman run --rm -it fanux/tetris game
Установка описанных примеров при развертывании ALTCOS
Использовав во время установки ignition-файл https://altcos.altlinux.org//configs/ignition/testContainers.ign (butane-файл https://altcos.altlinux.org//configs/butane/testContainers.btn) Вы в каталоге /opt/ получаете развернутое дерево для запуска описанных примеров.
/opt/altcos/
`-- examples
`-- docker
|-- docker
| `-- hello.sh
|-- docker-compose
| |-- docker-compose.yml
| |-- start.sh
| `-- stop.sh
`-- podman
`-- tetris.sh
- /opt/altcos/examples/docker/docker - скрипт hello.sh запуска контейнера;
- /opt/altcos/examples/docker/docker-compose - файл описания сервисов docker-compose.yml и с
крипты запуска и остановки сервисов;
- /opt/altcos/examples/podman/tetris.sh - скрипт запуска контейнера игры tetris через podman.