web-dev-qa-db-ja.com

Dockerイメージノードバージョンと.nvmrcのベストプラクティス

DockerイメージでNodeを使用してマイクロサービスを構築している場合-私が使用しているNodeのバージョンを把握しておく必要があります。

アイデアは-私はローカルでNodeを開発中で実行する予定です-そして、コンテナで実行しているときでも機能する必要があります。

私のDockerfileが次のようになっている場合:

FROM node:10.10-Alpine

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

EXPOSE 3001
CMD [ "npm", "start" ]

これは問題ありません。ただし、ローカル環境で使用しているノードのバージョンがわからない場合を除きます。

今、私は10.10私の.nvmrcファイル。

しかし、それらを同期させることを忘れないでください。それを行うより良い方法はありますか? .nvmrcを尊重するノード:アルパインはありますか?

2
dwjohnston

Dockerの主なポイントは、コンテナーの内部で発生することを外部で発生するものから分離することです(他の実行中のプログラム、他のコンテナー、または.nvmrc)。 Dockerイメージは非常にスペアになる傾向があり、_just必要なコンポーネントとデータを含み、Dockerfileで明示的に指定されます。必要な構成は、環境変数やコピーした構成ファイルなどで明示的に設定する必要があります。すべての要件がバンドル/カプセル化された分離された環境-Dockerは、異なる(非常に互換性のない)要件を持つワークロードを並行して実行する方法です。

Node Version Managerは、非常に異なる世界観に基づいています。複数のバージョンのノードがインストールされている可能性があり、それらの間で自由に切り替えられる可能性があると考える人。 per seには特に問題はありませんが、特に開発者のワークステーションにとっては、Dockerの哲学にほとんど似ていません。 1つ以上のノードバージョンがインストールされているDocker構成の数は非常に少なくなり、特にミニマルなAlpine Linuxで構築されたものやマイクロサービスのミニマリストの戦略で構築されたものは非常に珍しいものになります。

開発ステーションでノードのバージョンを切り替える必要がある場合は、そうしてください。ただし、そのワークフロー/複数のインストール済みバージョンの戦略をDockerイメージにマッピングしないことをお勧めします。それはせいぜい強制適合であり、Dockerを非常にうまく機能させる非常に精度とミニマリズムからあなたを奪います。代わりに、Dockerイメージを、ビルドプロセスの対象を絞った特定の結果と見なしてください。実行時に現在のバージョンを照会する必要がある場合、特定のバージョンのノードまたはその他のリソースを環境変数または構成ファイルとしてイメージに「書き込む」ことができます。複数のバリアントを作成する必要があり、それぞれが個別のノードバージョンを対象とする場合は、それで十分です。 Dockerには豊富なタグ付け機能があります。それはその目的で一般的に使用されます。

1
Jonathan Eunice

Package.jsonファイルを使用して、特定のプロジェクトで使用する必要があるnode.versionを定義できます。

{"private":true、 "engineStrict":true、 "engines":{"node": "10.x"}、 "devEngines":{"node": "10。 x "}

Npm installを実行し、10。*以外のノードバージョンを使用している場合、エラーが発生し、パッケージをインストールできません。これにより、他の開発者が別のノードバージョンを使用せず、このバージョンでpackage-lock.jsonファイルをコミットすることが保証されます。これにより、今後問題が発生する可能性があります。これについての詳細は https://docs.npmjs.com/files/package.json enginesセクションを参照してください。

また、ローカル開発環境に関連する.nvmrcファイルをリポジトリに残しておくこともできます。これにより、.bashrcファイルにコードを追加して、異なるプロジェクトにcdするときにノードのバージョンを自動的に切り替えることができます。

0
Bitclaw