Docker を使用して Node.js アプリケーションを効率的にデプロイする方法の紹介

青灯夜游
リリース: 2020-08-31 10:00:25
転載
1970 人が閲覧しました

Docker を使用して Node.js アプリケーションを効率的にデプロイする方法の紹介

合理的で効率的な導入ソリューションは、迅速なアップグレード、スムーズな切り替え、負荷分散、アプリケーションの分離、その他の導入機能を実現できるだけでなく、成熟した安定した監視機能も備えています。

kubernetes Node アプリケーションをサーバー側アプリケーションのブラック ボックスとして扱い、上記の条件に完全に一致し、k8s にノードをデプロイするチームが増えています。 [推奨されるビデオ チュートリアル: node js チュートリアル Docker ビデオ チュートリアル ]

ただし、その前に、Docker コンテナ上で Node アプリケーションを実行する必要があります。この章の主題。

# Docker でのフロントエンドのデプロイメントに関して、著者はいくつかの記事を書いています:

  1. #Docker でフロントエンドをデプロイする方法
  2. フロントエンド展開のプレビューと運用
  3. フロントエンド展開の開発プロセス
Aシンプルな Node アプリケーション

index.js

Node Web App の

hello, world バージョン

const http = require('http')

const app = async (req, res) => {
  res.end('hello, world')
}

http.createServer(app).listen(3000, () => console.log(3000))
ログイン後にコピー

パッケージ.json

Configuration

npm start でアプリケーションを起動します

"scripts": {
  "start": "node index.js"
},
ログイン後にコピー

ただし、これは最も単純な Node アプリケーションにすぎません。実際の環境では、さまざまなデータ ストレージが存在します。スケジュールされたタスクのスケジュール設定などについては、今は脇に置いておきましょう。それについては話さないでください。それだけで十分です。

もう少し複雑な Node アプリケーションについては、Shanyue のプロジェクト

whoami: serverlessdockerize の最も単純な例をチェックしてください。

NODE_ENV=production

運用環境では、

devDependecies に依存関係をインストールする必要はありません。NODE_ENV 環境変数が運用に設定されている場合、 devDep はスキップされます。

# 通过设置环境变量,只安装生产环境依赖
$ NODE_ENV=production npm ci

# 通过显式指定 flag,只安装生产环境依赖
$ npm ci --production
ログイン後にコピー

一方、一部のサードパーティ モジュールは、NODE_ENV 環境変数に基づいて予期しない構成を作成します。したがって、運用環境ではこの環境変数の構成に注意してください。

Node アプリケーションの簡単なデプロイメント

典型的なサーバー指向の Node アプリケーションは次のように実行されます:

  1. npm install
  2. npm run config, 構成サービス (consul/vault) から構成 (データベースやキャッシュされたアカウントのパスワードなど) をプルします。この時点で、ビルド サーバーには構成サービスのアクセス許可が必要です
  3. npm run merge、データベース移行スクリプト、データベース テーブルの列と行の変更を実行します。この時点で、ビルド サーバーにはデータベース アクセス許可が必要です
  4. npm start、開始しますノード サービス
  5. ##実行中のステップを Dockerfile に変換します:
# 选择一个体积小的镜像 (~5MB)
FROM node:12-alpine

# 环境变量设置为生产环境
ENV NODE_ENV production

WORKDIR /code

# 更好的根据 Image Layer 利用缓存
ADD package.json package-lock.json /code
RUN npm ci

ADD . /code

# 配置服务及数据库迁移
RUN npm run config --if-present && npm run migrate --if-present

EXPOSE 3000
CMD npm start
ログイン後にコピー

これで、ほとんどのノード アプリケーションには十分です。改善したい場合は、次のマルチステージ ビルドに進むことができます。

node-gyp とネイティブ アドオン

Node にはいくつかのネイティブ アドオンが存在する可能性があります。それらは、node-gyp を通じてコン​​パイルされ、

python

, に依存します。 makeg <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false">$ apk --no-cache add python make g++</pre><div class="contentsignin">ログイン後にコピー</div></div>コンパイルプロセスを伴うイメージ構築では、ソースファイルとビルドツールによりスペースの無駄が発生します。イメージの

マルチステージ ビルド

を使用すると、スペースを効率的に利用できます。 Go AppFE App もこのルールに従うように構築されています。

    Go アプリケーションを複数の段階で構築する
  • フロントエンド アプリケーションを複数の段階で構築する
  • ノード アプリケーションの構築 ミラーリングの場合、ミラーリングの最初の層は
node_modules

を構築するために使用されます。

# 选择一个体积小的镜像 (~5MB)
FROM node:12-alpine as builder

# 环境变量设置为生产环境
ENV NODE_ENV production

# 更好的根据 Image Layer 利用缓存
ADD package.json package-lock.json ./
RUN npm ci

# 多阶段构建之第二阶段
# 多阶段构建之第二阶段
# 多阶段构建之第二阶段
FROM node:12-alpine

WORKDIR /code
ENV NODE_ENV production

ADD . .
COPY --from=builder node_modules node_modules
# 配置服务及数据库迁移
RUN npm run config --if-present && npm run migrate --if-present

EXPOSE 3000
CMD npm start
ログイン後にコピー
関連記事

    N-API と Node.js 用の C アドオンの作成の開始
  1. ##Docker for Node の使用開発と運用における .js
  2. #プログラミング関連の知識の詳細については、プログラミング入門
  3. をご覧ください。 !

以上がDocker を使用して Node.js アプリケーションを効率的にデプロイする方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート