移行チェックリスト

Docker Hardened イメージへの移行を行う際には、以下のチェックリストを用いて、重要な各項目への対処を確実に行ってください。

移行における考慮事項

項目必要な作業
ベースイメージDockerfile の FROM 文は、それまでのベースイメージから Docker Hardened イメージにします。
パッケージ管理パッケージのインストールはビルドステージにおいて dev のタグをつけたイメージ内でのみ行うものとします。Alpine ベースでは apk、Debian ベースでは apt を用います。ランタイムイメージには必要となる生成物をコピーします。これはランタイムにはパッケージマネージャーがないからです。
非 root ユーザーアプリケーションがアクセスするファイルやディレクトリは、非 root ユーザー (UID 65532) によって読み書きが可能とします。なぜならランタイムイメージは、非 root ユーザーにより実行されるのがデフォルトであるからです。
マルチステージビルドビルドツールやパッケージマネージャーを必要とする場合は、ビルドステージ向けのイメージとして devsdk のタグづけされたものを用います。最終のランタイムステージでは、非 dev のイメージを用います。
TLS 証明書ca 証明書をインストールする処理はすべて削除します。DHI にはデフォルトで ca 証明書が含まれているからです。
ポートアプリケーションはコンテナー内部におけるポート 1025 またはそれ以降を利用するように設定します。なぜなら Kubernetes を用いる場合や Docker Engine バージョンが 20.10 よりも古い場合に、非 root ユーザーは特権ポート (1024 以下) をバインドすることができないからです。
エントリーポイント利用する DHI のエントリーポイントを確認します。これは docker inspect を実行するか、あるいはイメージのドキュメントから確認します。アプリケーションが別のエントリーポイントに依存しているようなら、Dockerfile 内の ENTRYPOINTCMD 命令の内容を修正します。
シェルの除去シェルコマンド (RUN, SHELL) は、dev タグづけしたビルドステージに移動させます。つまりランタイムイメージにはシェルを含めないようにします。したがって必要となる成果物はビルドステージからコピーするようにします。