Об этом проекте
Baseimage-docker — это базовый образ Docker, построенный на Ubuntu и адаптированный для использования внутри контейнеров. Он публикуется как `phusion/baseimage` в Docker Hub и GHCR и предназначен в качестве отправной точки для ваших собственных образов.
Проект утверждает, что стандартная Ubuntu не рассчитана на контейнеры: её init-система Upstart предполагает наличие реального или виртуализированного оборудования, и многие особые случаи контейнеров легко обработать неправильно. Baseimage-docker включает исправления и инструменты администрирования, которые считает необходимыми.
Что он включает:
- Корректный процесс init, `/sbin/my_init`, который собирает осиротевшие дочерние процессы (избегая накопления зомби) и перенаправляет SIGTERM дочерним процессам, чтобы они могли корректно завершиться, а не быть убитыми через SIGKILL.
- runit в качестве замены Upstart, используемый для супервизии сервисов и автоматического перезапуска упавших демонов.
- syslog-ng, слушающий только локально и перенаправляющий сообщения в `docker logs`, а также logrotate.
- cron и SSH-сервер, который отключён по умолчанию и допускает только аутентификацию по ключу.
- `setuser` для запуска команд от имени другого пользователя с корректным `$HOME` и `install_clean` для установок через apt с очисткой кэшей.
- Исправления несовместимости APT с Docker.
Использование: укажите `FROM phusion/baseimage:<VERSION>` и `CMD ["/sbin/my_init"]`. Дополнительные демоны добавляются путём создания исполняемых скриптов `run` в `/etc/service/<NAME>`; runit запускает их и перезапускает при выходе. Скрипты запуска можно размещать в `/etc/my_init.d` (выполняются в лексикографическом порядке) или `/etc/rc.local`, и они должны завершаться с кодом 0.
Переменные окружения, переданные через `docker run --env` или `ENV` в Dockerfile, импортируются `my_init` из `/etc/container_environment`, а затем выгружаются в форматы shell и JSON, чтобы сервисы и скрипты на любом языке могли читать исходные значения. Каталог принадлежит root и по умолчанию ограничен группой `docker_env`, поскольку значения могут быть конфиденциальными. Таймауты для завершения дочерних процессов можно настраивать с помощью `KILL_PROCESS_TIMEOUT` и `KILL_ALL_PROCESSES_TIMEOUT`.
В README указано, что образ потребляет около 8,3 МБ оперативной памяти и, по формулировке проекта, легче, чем Busybox или Alpine. Там также объясняется, что запуск нескольких процессов ОС в одном контейнере совместим с философией Docker об одном логическом сервисе и что проект не навязывает ни один из подходов. В Ubuntu 26.04 LTS поставляется Rust Coreutils вместо GNU Coreutils, что README отмечает как момент, который следует учитывать.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.