1.前面に書きます: 軽量仮想化テクノロジーとして、Docker には継続的インテグレーション、バージョン管理、移植性、分離性、セキュリティなどの利点があります。この記事では、Docker を使用して Vue フロントエンド アプリケーションをデプロイし、同様のニーズを持つ学生が参照しやすいように、実装のアイデアと具体的な手順をできるだけ詳しく説明します。 Docker は、開発者がアプリケーションと依存パッケージをポータブル コンテナにパッケージ化できるようにするオープン ソースのアプリケーション コンテナ エンジンです。コンテナには、アプリケーション コード、ランタイム環境、依存ライブラリ、構成ファイル、その他の必要なリソースが含まれます。コンテナを使用すると、便利で高速、かつプラットフォームから切り離された自動展開方法を実装できます。展開時の環境が何であっても、コンテナ内のアプリケーションは同じ環境で実行されます。 (詳細はDockerの公式サイトをご覧ください) Docker と @vue/cli はデフォルトでインストールされます。 関連バージョン:
動作環境はmacOSです。お使いのOSと読者のOSが異なる場合はご自身で調整してください。 関連画像:
2. 具体的な実施内容:
3. Vueアプリケーションを作成する 3.1 vue cliはvueプロジェクトを作成します コマンドの実行 糸サーブ / npm 実行サーブ http://localhost:8081 にアクセスしてください 3.2 書き直し ページを少し書き直し、App.vue の HelloWorld コンポーネントに渡されるメッセージを Hello Docker に変更し、作成されたライフサイクルにインターフェース リクエストを追加します。 'axios' から axios をインポートします。 … axios.get('/api/json', { パラメータ: {} })。それから( 解像度 => { コンソールログ(res); } )。キャッチ( エラー => { コンソール.log(エラー); } ) … このとき、ページ コンソールにエラー メッセージが表示されます。 /api/json インターフェース 404。もちろん、現時点ではこのインターフェースは存在しません。とりあえずここに書いて、後でこのインターフェースを呼び出します。 3.3 Vueプロジェクトの構築 コマンドの実行 糸ビルド / npm 実行ビルド 現時点では、プロジェクトのルートディレクトリに追加の フォルダ dist ディレクトリ全体をサーバーに転送し、静的リソース サイトとしてデプロイすると、プロジェクトに直接アクセスできます。 次に、このような静的リソースサイトを構築してみましょう。 4 Vueアプリケーションイメージをビルドする nginx は、高性能な HTTP およびリバース プロキシ サーバーです。ここでは、nginx イメージをベースとして使用して、vue アプリケーション イメージを構築します。 4.1 nginxイメージを取得する docker プル nginx
4.2 nginx config設定ファイルを作成する プロジェクトのルートディレクトリに サーバー{ 聞く 80; server_name ローカルホスト; #文字セット koi8-r; access_log /var/log/nginx/host.access.log メイン; error_log /var/log/nginx/error.log エラー; 位置 / { ルート /usr/share/nginx/html; インデックス index.html index.htm; } #エラーページ 404 /404.html; # サーバーのエラーページを静的ページ /50x.html にリダイレクトします # エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルート /usr/share/nginx/html; } } この設定ファイルは、ホームページが 4.3 Dockerfileを作成する nginxから dist/ /usr/share/nginx/html/ をコピーします。 nginx/default.conf をコピー /etc/nginx/conf.d/default.conf
4.4 Dockerfileに基づいてvueアプリケーションイメージを構築する コマンドを実行します(最後の「.」がないことに注意してください) コンテナをビルドします。 ローカルイメージを表示し、コマンドを実行します docker イメージ ls | grep vuenginxcontainer
容器。 4.5 vueアプリコンテナを起動する Docker コンテナ: イメージの実行時のエンティティ。イメージとコンテナの関係は、オブジェクト指向プログラミングにおけるクラスとインスタンスの関係に似ています。イメージは静的な定義であり、コンテナはイメージの実行時のエンティティです。コンテナは作成、開始、停止、削除、一時停止などが可能です。 vuenginxcontainer イメージに基づいてコンテナを起動し、次のコマンドを実行します。 docker 実行 \ -p 3000:80 \ -d --name vueApp \ vuenginxコンテナ docker runはイメージに基づいてコンテナを起動します ドッカーps vueApp という名前のコンテナがすでに実行されていることがわかります。 http://localhost:3000にアクセスしてください vue アプリケーションにアクセスできるはずです: これまで、静的リソース サービスが 5 インターフェースサービス インターフェースサービスを提供するために別のノードコンテナを展開する 5.1 エクスプレスサービス Node Web Framework '厳密な使用'; 定数 express = require('express'); ポート = 8080; 定数HOST = '0.0.0.0'; express() は、定数です。 app.get('/', (req, res) => { res.send('Hello world\n'); }); app.get('/json', (req, res) => { res.json({ コード: 0, データ:'これはノード コンテナからのメッセージです' }) }); app.listen(ポート、ホスト); console.log(`http://${HOST}:${PORT} で実行中`); 5.2 docker プルノード 5.3 ノードから ワークディレクトリ /usr/src/app package*.json をコピーします。/ npmインストールを実行 コピー 。 。 エクスポーズ8080 CMD [ "npm", "start" ] イメージをビルドするときに、 ノードモジュール npm-debug.log 5.4 nodewebserverイメージのビルド ビルドコマンドを実行します。 ビルドを実行します。 5.5 ノードサーバーコンテナを起動する 先ほど構築したnodewebserverイメージに基づいて、nodeserverという名前のコンテナを起動し、インターフェースサービスポート8080を提供し、ホストのポート5000をマップします。 docker 実行 \ -p 5000:8080 \ -d --name ノードサーバー \ ノードウェブサーバー 現在のDockerプロセスを表示する ドッカーps nodeserverコンテナも正常に動作していることがわかります。 http://localhost:5000/jsonにアクセスしてください。 以前に書き込まれたJSONデータにアクセスできる これまでのところ、バックエンド インターフェース サービスも正常に起動しています。ページ要求インターフェイスをバックエンド インターフェイス サービスに転送するだけで、インターフェイスを呼び出すことができます。 6. クロスドメイン転送 vueApp コンテナ上のリクエストを nodeserver コンテナに転送したい。まず、nodeserver コンテナの 6.1 ノードサーバーコンテナの IP アドレスを表示します。 コンテナの内部 表示するコンテナを入力してください docker 実行 -it 02277acc3efc bash /etc/hosts を cat する コンテナ情報を直接表示するには、docker examine [ containerId ] を実行します。 docker 検査 02277acc3efc ネットワーク関連の構成情報を見つけます。 nginx 転送を構成するときに使用する、ノード サービス コンテナーに対応する IP アドレスを記録します。 6.2 nginxの設定を変更する Nginx は、ノード サービスの default.conf を指すように場所を設定します (Nginx について詳しく知りたいフロントエンド ユーザーの場合は、Nginx の設定と場所の詳細については、「(1 つの記事で Nginx の場所の一致を理解する)」を参照してください)。 /api/{path} をターゲット サービスの /{path} インターフェースにリダイレクトする書き換えルールを追加します。 以前の nginx/default.conf ファイルに以下を追加します。 場所 /api/ { /api/(.*) /$1 を書き換えて、break; プロキシパス http://172.17.0.2:8080; } 変更後、問題に気付きました。vueApp コンテナは vuenginxcontainer イメージに基づいて実行され、イメージが最初にビルドされたときに、nginx 構成の default.conf が直接組み込まれていました。したがって、default.conf を変更する必要がある場合は、新しいイメージを再構築し、新しいイメージに基づいて新しいコンテナを実行する必要があります。 7. 改善点 設定ファイルが変更されるたびにコンテナを再起動するだけで、新しい設定を有効にすることは可能ですか? 答えはもちろん「はい」です。 イメージをビルドするときに、Nginx 構成はイメージにコピーされず、ホストに直接マウントされます。構成を変更するたびに、コンテナを再起動するだけです。 7.1 Dockerfileを変更する vueclidemoプロジェクトのDockerfileを変更する nginxから dist/ /usr/share/nginx/html/ をコピーします。 nginx/default.conf をコピー /etc/nginx/conf.d/default.conf 7.2 Vueアプリケーションコンテナを再実行する nginx イメージに基づいてコンテナ vuenginxnew を直接起動し、次のコマンドを実行します。 docker 実行 \ -p 3000:80 \ -d --name vuenginxnew \ --mount type=bind、source=$HOME/SelfWork/docker/vueclidemo/nginx、target=/etc/nginx/conf.d \ を実行します。 --mount type=bind、source=$HOME/SelfWork/docker/vueclidemo/dist、target=/usr/share/nginx/html \ を実行します。 nginx
この方法では、nginx の設定を変更したり、vue アプリケーションを再構築したりするたびに、コンテナを再起動するだけですぐに変更が有効になります。 このとき、再度 http://localhost:3000/api/json にアクセスすると、インターフェースが正常に返されることがわかり、転送が有効になっていることがわかります。 この時点で、インターフェース サービスの転送も調整されています。 7.3 負荷分散の設定 バックエンド サービスは、サービスの安定性を確保するために、通常、デュアル マシンまたはマルチ マシンで構成されます。別のバックエンド サービス コンテナーを起動し、 セクション4.5と同様の操作に基づいて新しいコンテナを起動し、セクション5.1と同様の操作に基づいて新しいコンテナのIPアドレス(172.17.0.3)を確認します。 アップストリームバックエンド{ サーバー 172.17.0.2:8080; サーバー 172.17.0.3:8080; } … 場所 /api/ { /api/(.*) /$1 を書き換えて、break; proxy_pass バックエンド; } 8. 最後に書く コマンドラインに慣れていない学生は、Kitematic を選択して、 9 結論 Docker は非常に強力な自動デプロイメント方法と柔軟性を提供し、複数のアプリケーションを分離し、開発の俊敏性、制御性、移植性を実現します。この記事では、Vue プロジェクトを例に、Docker を使用してフロントエンドとバックエンドが分離されたプロジェクトをデプロイする完全な手順を実装します。この記事が、Docker を導入したい学生の役に立つことを願っています。 参考文献 Docker公式サイト 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: MySQL 8.0.15 バージョンのインストールチュートリアル Navicat.list への接続
HTML+CSS 1. WEB 標準と W3C の理解と知識<br /> タグを閉じ、小...
この記事は、CentOS 7の詳細なインストールチュートリアルを参考のために記録します。具体的な内容...
ウェブページ上の画像が一般的に jpg、gif、png 形式であることは誰もが知っています。それらの...
JavaScript では、警告ボックス、確認ボックス、プロンプト ボックスの 3 種類のメッセージ...
<em></em> などのフレーズ要素を使用すると、意図した視覚スタイルを維...
目次方法 1: ルーティング メタ情報 (meta)方法 2: ルーティング テーブルを動的に生成す...
目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...
1. 事業背景マスク レイヤーを使用してユーザーの異常な操作を遮断する方法は、フロントエンドでよく使...
この記事では、WindowsでのMySQL 5.7.18のインストールと設定のチュートリアルを参考ま...
JavaScript には、for、for in、for of、forEach ループなど、多くのル...
King of Glory をプレイしたことがある人なら、このページの効果をよくご存知でしょう。なぜ...
0. 概要Zabbix は非常に強力なオープンソースの監視ツールです。以下では、Zabbix がテー...
SQL文 /* MySQL で重複行を削除するいくつかの方法 ---Chu Minfei ---20...
原因外部ファイルをミニプログラムにインポートする方法は次のとおりです: @import "...
ここでは、あまり使われていない、または誤解されている 10 個の HTML タグを紹介します。あまり...