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