このプロジェクトについて
Baseimage-dockerはUbuntuをベースにコンテナ内での利用向けに調整されたDockerベースイメージです。Docker HubとGHCRで`phusion/baseimage`として公開されており、独自イメージの出発点として使うことを目的としています。
このプロジェクトは、標準のUbuntuがコンテナ向けに設計されていないと主張しています。Upstart initは実ハードウェアまたは仮想化ハードウェアを前提としており、コンテナの多くの特殊ケースは間違えやすいものです。Baseimage-dockerは、必要と考える修正と管理ツールをまとめています。
含まれるもの:
- 正しいinitプロセスである`/sbin/my_init`。孤立した子プロセスを回収し(ゾンビの蓄積を回避)、SIGTERMを子プロセスに転送してSIGKILLされる代わりにクリーンに停止できるようにします。
- Upstartの代替としてのrunit。サービスの監視と、クラッシュしたデーモンの自動再起動に使用されます。
- syslog-ng。ローカルのみで待ち受け、メッセージを`docker logs`に転送します。logrotateも含みます。
- cron、およびデフォルトで無効で鍵認証のみを許可するSSHサーバー。
- 正しい`$HOME`で別ユーザーとしてコマンドを実行する`setuser`、およびキャッシュをクリーンアップするaptインストール用の`install_clean`。
- DockerとのAPT非互換性の修正。
使用方法: `FROM phusion/baseimage:<VERSION>`と`CMD ["/sbin/my_init"]`を設定します。追加のデーモンは`/etc/service/<NAME>`の下に実行可能な`run`スクリプトを作成して追加します。runitがそれらを起動し、終了時に再起動します。起動スクリプトは`/etc/my_init.d`(辞書順で実行)または`/etc/rc.local`に配置でき、終了コード0で終了する必要があります。
`docker run --env`またはDockerfileの`ENV`で渡された環境変数は、`my_init`によって`/etc/container_environment`からインポートされ、シェル形式とJSON形式にダンプされるため、任意の言語のサービスやスクリプトが元の値を読み取れます。値が機密である可能性があるため、このディレクトリはデフォルトでroot所有で`docker_env`グループに制限されています。子プロセス終了のタイムアウトは`KILL_PROCESS_TIMEOUT`と`KILL_ALL_PROCESSES_TIMEOUT`で調整できます。
READMEには、このイメージが約8.3 MBのRAMを消費し、独自の枠組みではBusyboxやAlpineより軽量であると記載されています。また、1つのコンテナで複数のOSプロセスを実行することはDockerの単一論理サービスの哲学と両立し、このプロジェクトはどちらのアプローチも強制しないと説明しています。Ubuntu 26.04 LTSはGNU CoreutilsではなくRust Coreutilsを同梱しており、READMEはこれを考慮事項として注記しています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.