🐳

distroless の nodejs コンテナに npm を用意するサンプル

2022/05/19に公開

distrolessには、Node.js向けのコンテナイメージがあります。
そのコンテナイメージにはnodeしか存在しないため、ビルド時にnpmを使えるようにします。[1]

Dockerfile

解説

  • distrolessにはシェルは存在しないため、BusyBoxをシェルとして導入します。[2]
  • npm自体が/usr/bin/envに依存する部分が多いため、シンボリックリンクを張ります。
  • $PATHnodeを含めるため、シンボリックリンクを張ります。
  • npm本体はnpmjs.comから取得します。
  • $PATHnpmを含めるため、シンボリックリンクを張ります。
脚注
  1. デプロイ用のイメージにnpmを含めないでください、基本的には不要です。 ↩︎

  2. distrolessのdebugタグを使用する手もありますが、nodejs系ではビルドコストが増大します。 ↩︎

Discussion