Dockerfile
パッケージマネージャーは pnpm
を使ってる。
なお .env
を runner ではなく builder の時点で用意してる理由は、実行時ではなくビルド時に必要な環境変数も .env
に書いてるから。具体的には ./config/server.ts
の url
にセットしてる値がそう。
なのでそういうことをしてない人は、 .env
をリネームするのは builder の時点でもいいと思う。
最後の CMD
で指定してる dist/server.js
については後述。
もし npm
を使う場合、だいたい以下の部分を替えればよいはず。
追記: Dockerfile (distroless版)
いったんこの記事を書いたあとでdistroless版を作ってみたらちゃんと動いたので、載せておく。
runner だけをdistroless (nonroot) なイメージに変更している。CMD
の引数には dist/server.js
のみを指定する。
server.ts
上記の Dockerfile に出てくる dist/server.js
は、Strapiプロジェクトにデフォルトでは存在しないファイルなので、別途作る必要がある。
これ自体は公式ドキュメントの以下のページに載っているもの。
TypeScript | Strapi Documentation
プロジェクト直下に server.ts
を作成し、中身を以下の通りにする。
これがあると npm
が無くても node
コマンドからこれ叩いてStrapiを起動できるので、 distroless なイメージでも大丈夫。
.dockerignore
無くてもいいが覚え書き。
ビルド時に必要なファイルを把握できてないのが個人的に嫌なので、必要なファイルだけ持っていく方法を使っている。
この書き方は以下の記事を参考にした。
軽量・セキュアな .dockerignore の書き方 #Docker - Qiita
以上。