Nginx + HTTP/3 (Quiche)のDockerイメージを生成するためにしたこと
書きたいこと
だが、上記の公式ドキュメントに書かれていないが必要なことがいくつかあった。ここでは書かれていない必要なことやDockerイメージを作るならではのことについて書きたい。
Dockerのベースイメージ
Dockerfileを書くために必要だったこと
Rustのアンインストール
これが割と対処に時間がかかった。
rustup self uninstall -yをするとCargoやrustupなども含めRustのアンインストールが出来る。だがこれを&&でコマンドを1つにくっつけて実行すると'error: No such file or directory (os error 2)'というエラーが出る現象にハマった。 不思議なことに、&&でくっつけずにRUN rustup self uninstall -yで実行したりイメージ作成後にDockerコンテナ内に入って手動でrustup self uninstall -yする場合は上記のエラーは発生しない。
最終的にRustインストール時にどのファイルが変更されたり追加されるのかをdocker diffで調べて、$HOME/.cargoと $HOME/.rustupにファイルが大量に追加されることが分かり、rm -rf $HOME/.cargo $HOME/.rustupで削除するようにした。$HOME/.profileにPATHを通す設定が追加されるがそこはそのまま。 &&で繋げたかったのは、Dockerイメージのサイズを小さくするため。RUN ...を分けるとレイヤーも分かれるとサイズ大きくなるはずなので&&したかった。Rustやそのライブラリだけで1GBを超えていた。RustのインストールからライブラリのインストールからRustのアンインストールまでが&&つながるのでイメージサイズがnginx:latestと少ないか同じくらいのサイズに出来た。