Dockerfile を使用して Node.js サービスをデプロイする方法

Dockerfile を使用して Node.js サービスをデプロイする方法

Dockerfileを初期化する

プロジェクトの名前が express であると仮定して、express プロジェクトで Dockerfile ファイルを作成して編集します。

$ vim Dockerファイル

ノードから:最新

mkdir -p /home/www/express を実行します。
ワークディレクトリ /home/www/express

コピー . /home/www/express

npmインストールを実行

エクスポーズ3000

エントリポイント ["npm", "run"]
CMD ["開始"]

このファイルには次のコマンドが含まれています。

  • FROM node:latest - ノードベースイメージの最新バージョンを使用することを指定します
  • RUN mkdir -p /home/www/express – コンテナ内に /home/www/express ディレクトリを作成します。
  • WORKDIR /home/www/express - コンテナ内の作業ディレクトリを /home/www/express に設定します
  • COPY . /home/www/express - ホスト上の現在のディレクトリの内容をミラーディレクトリ /home/www/express にコピーします。
  • npm install を実行します - npm install はアプリケーションに必要な NPM パッケージをインストールします
  • EXPOSE 3000 - コンテナのポート3000を外部に開きます
  • ENTRYPOINT ["npm", "run"] - コンテナの起動後に実行するコマンド。 docker run によって提供されるパラメータによって上書きすることはできません
  • CMD ["start"] - コンテナの起動時に実行するコマンド。docker runで提供されるパラメータで上書きできます。

イメージを構築する

Dockerfile ファイルを書き込んだ後、docker build コマンドを使用してイメージをビルドできます。

$ sudo docker build -t test/express 。

-t パラメータを使用して、イメージに test/express という名前を付けます。ビルド プロセスは次のようになります。

ビルドコンテキストを Docker デーモンに送信しています 29.7 kB
ステップ 1/8: registry.src.followme.com:5000/node:v1 から
 ---> c99c549e8227
ステップ 2/8: mkdir -p /home/www/express-app を実行します
 ---> 8be9a90629b0 で実行中
 ---> b9f584851225
中間コンテナ 8be9a90629b0 を削除しています
ステップ 3/8: WORKDIR /home/www/express-app
 ---> 5072c31f9dd9
中間コンテナ e9dbf4ce3d8b を削除しています
ステップ 4/8: コピー . /home/www/express-app
 ---> a4d1725f15ed
中間コンテナ 30aa49765015 の取り外し
ステップ5/8:糸を通す
 ---> f181c243deaa で実行中
糸インストール v1.3.2
[1/4] パッケージを解決しています...
[2/4] パッケージを取得しています...
[3/4] 依存関係をリンクしています...
[4/4] 新しいパッケージを作成しています...
9.46秒で完了しました。
 ---> d390931d73e6
中間コンテナ f181c243deaa を削除しています
ステップ 6/8: EXPOSE 3000
 ---> 94101ab38864 で実行中
 ---> 43199a8a5a90
中間コンテナ 94101ab38864 の削除
ステップ7/8: ENTRYPOINT npm run
 ---> 80b1318962cf で実行中
 ---> 6b203c50e855
中間コンテナ 80b1318962cf を削除
ステップ 8/8 : CMD 開始
 ---> a9909e537f59 で実行中
 ---> d56eae48377c
中間コンテナを削除しています a9909e537f59
d56eae48377c の構築に成功しました

コンテナの実行

イメージがビルドされたら、ビルドされたイメージを使用してコンテナを作成/実行し、Express アプリケーションの Docker デプロイを実現できます。

tets/express イメージを使用してコンテナを実行します。

$ sudo docker run -d --name experss-app -p 3000:3000 test/express

上記の操作では、コンテナを test/express イメージで実行し、コンテナに express-app という名前を付けました。コンテナを実行するときに、コンテナをバックグラウンドで実行するための -d パラメータも指定します。 -p パラメータは、ホストのポート 3000 をコンテナのポート 3000 にマッピングします。コンテナを実行した後、docker ps コマンドを使用して実行中のコンテナを確認できます。これで、localhost:3000 経由でサービスにアクセスできるようになりました。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerfile の CMD および ENTRYPOINT コマンドの詳細な説明
  • 最高のDockerfileを書く方法
  • Dockerfile の COPY コマンドと ADD コマンドの詳細な説明
  • Dockerfileイメージ構築ファイルとDockerの関連コマンドの詳細な紹介
  • Dockerfile を使用して MySQL イメージを構築し、データの初期化と権限設定を実装する詳細な説明
  • Dockerfile における ENV 命令の具体的な使用法の詳細な説明
  • Dockerfileの使用例
  • 公式 Tomcat イメージを作成するための Dockerfile とイメージの使用方法の詳細な説明
  • Dockerfile の一般的なコマンドの概要
  • Dockerfile を使用して SpringBoot プロジェクトをデプロイする方法
  • Dockerfile を使用して Java ランタイム環境のミラーを作成する方法
  • Dockerfileを使用して独自のイメージを作成する方法
  • Dockerfile 命令 ADD と COPY の紹介
  • Dockerfileにおけるマルチステージ(マルチステージビルド)の詳しい説明
  • Docker の基礎: Dockerfile コマンドの詳細な説明
  • Dockerfile の手順の説明
  • Dockerfile命令VOLUMEの簡単な紹介
  • Dockerfileの簡単な紹介

<<:  Centos6.5 で MySQL 5.7.19 をインストールして設定する方法

>>:  Uniappの小規模プログラム開発経験

推薦する

mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...

HTML&CSS&JS 互換性ツリー (IE、Firefox、Chrome)

Web デザインにおけるツリーとは何ですか?簡単に言うと、リンクをクリックするとサブディレクトリが展...

ウェブページのCSSの優先順位について詳しく説明します

CSS の優先順位について話す前に、CSS とは何か、CSS が何に使用されるのかを理解する必要があ...

両端揃えレイアウトを実現する CSS 列のサンプルコード

1. 堂々巡りいろいろ試行錯誤した結果、均等割り付けレイアウトを実現する最も簡単な方法は CSS ...

DockerにRabbitMQを素早くインストールする方法

1. 画像を取得する #Webコントロールページを含むバージョンを指定します docker pull...

一般的な JavaScript 文字列メソッド 28 個と使用方法のヒントのまとめ

目次序文1. 文字列の長さを取得する2. 文字列の指定された位置の値を取得する(1) charAt(...

JavaScript配列の一般的なメソッドの概要

目次1. はじめに2. フィルター() 3. マップ() 4. ソート() 5. 減らす() 6. ...

Linux の sudo 脆弱性により不正な特権アクセスが発生する可能性がある

Linux で新たに発見された sudo の脆弱性を悪用すると、特定のユーザーが root としてコ...

JavaScript を使用してページに動的な検証コードを実装する例

導入:現在、プログラム攻撃を防ぐために、ユーザーがログインまたは登録するときに多くの動的検証テクノロ...

ウェブデザイナーが注意すべき 43 のウェブデザインの間違い

これはウェブサイトのユーザビリティに関する記事です。著者は自身の経験に基づいて、ウェブサイトのデザイ...

Vue でユーザー権限に基づいてルートを動的に追加する方法

ユーザーの権限に応じて異なるメニュー ページを表示します。知識ポイントルートガード(事前ガードを使用...

MySQLデータ損失のトラブルシューティング事例

目次序文現地調査ケースの再現要約する序文最近、友人が突然WeChatで連絡してきて、MySQLでデー...

固定、流動的、柔軟なウェブページレイアウトの長所と短所の分析

ウェブデザイナーを長い間悩ませてきた疑問があります。それは、固定レイアウト、流動的レイアウト、柔軟レ...

オンラインMySQLオプティマイザの誤判断によって発生した低速クエリイベントを記録する

序文:非常に遅いクエリとリクエストのタイムアウトのアラートを受け取りました。メトリックを通じて My...

JavaScript と CSS を最適化してウェブサイトのパフォーマンスを向上させる

<br /> 第 1 部と第 2 部では、Web サイトのパフォーマンス、ページ コンテ...