その理由は モッカー プラットフォームを導入したかったので、友人の勧めで既成のプロジェクト api-mocker を選択しました。 プロジェクトはサーバーノード、クライアントvue、データベースmongoDBに分かれています。 直接デプロイしようとすると、node、mongo、nginx など多くの環境をインストールする必要があることがわかりました。非常に面倒でした。以前は docker を使用していたため、環境なしで docker を使用して直接デプロイできるかどうか疑問に思っていました。そこでこの試みがありました マルチコンテナ通信 プロジェクトは3つの部分に分かれているため、3つのコンテナ(node、mongo、nginx)を構築する必要があります。 コンテナはどのように相互に通信するのでしょうか? # リンクコマンドを介して接続を確立します$ docker run --name <Name> -d -p <path1>:<path2> --link <containerName>:<alias> <containerName:tag/imageID>
次に、展開を始めます 実装プロセス 1. mongoコンテナを構築する 2. ノードコンテナを構築し、mongoコンテナとの接続を確立する 3. nginxコンテナを構築し、ノードコンテナとの接続を確立する mongoコンテナを構築する まずはmongoイメージを取得しましょう $ docker pull mongo:latest それではこのイメージを実行してみましょう。 $ docker イメージ リポジトリ タグ イメージ ID 作成 サイズ mongo 最新 05b3651ee24e 2週間前 382MB --auth ディレクティブは、Mongo 接続 ID 検証をオンにします。ノードがコンテナー間で接続されているときに ID 検証が設定されていないため、検証がオンになります。サーバーは Mongo データベースに接続できません。
コンテナを表示 $ docker ps -a コンテナID イメージ コマンド 作成ステータス ポート名 0d440be90935 mongo "docker-entrypoint.s..." 14 時間前 14 時間前 0.0.0.0:27017->27017/tcp mock-mongo mongoの認証を有効にしたので、mongoコンテナに入り、ノードが接続するときに使用するアカウントを設定する必要があります。 $ docker exec -it mock-mongo /bin/bash $ mongo管理者 # マネージャーユーザーを作成する $ db.createUser({ユーザー:"admin", パスワード:"admin", ロール:[{ロール:"admin", db:"admin"}]}) # アカウント認証 $ db.auth('admin','admin') mongo データベースが実行されているので、ノード コンテナーを作成します。 ノードコンテナを構築し、mongoコンテナとの接続を確立する ノードコンテナの構築を始める前に、まずmongoコンテナのエイリアス、ポート番号、ログインアカウントのパスワードを決める必要があります。
まずノードサーバーの設定を変更しましょう ファイル構成 dockerfile/api-mocker/server/config/config.default.js mongo接続構成を変更します。dbは、事前に設定されたmock-mongoコンテナのエイリアスです。 マングース: { URL: 'mongodb://admin:admin@db:27017/api-mock?authSource=admin' }, 次に、イメージをビルドするためのDockerfileを作成します。 # ベースイメージをFROM node:latestから指定 # メンテナー MAINTAINER [email protected] # 作業ディレクトリ WORKDIR /www #ローカルファイルを解凍せずにコンテナにコピーする COPY api-mocker node-server/api-mocker エクスポーズ7001 ワークディレクトリ /www/node-server/api-mocker/server npmインストールを実行 ワークディレクトリ /www/node-server/api-mocker # コンテナの構築後に呼び出され、コンテナの起動時に呼び出されます CMD ["make", "prod_server"] 書き込んだDockerfileファイルを使用してイメージを構築します ビルドは -t で始まり、実行は 1.0.0 になります。 画像を見てみましょう $ docker イメージ リポジトリ タグ イメージ ID 作成 サイズ mock-server 1.0.0 957ad2aa1f97 8分前 674MB mongo 最新 05b3651ee24e 2週間前 382MB ここで重要なステップが始まります。mocker-server イメージを実行し、サーバーとデータベース間の接続を確立します。 次のようにコードをコピーします。 $ docker run -d -i -t -p 7001:7001 --name mock-server1 --link mock-mongo:db mock-server:1.0.0 /bin/bash 現在実行中のコンテナを見てみましょう $ docker ps コンテナID イメージ コマンド 作成ステータス ポート名 ee780b903c64 mock-server:1.0.0 "/bin/bash" 約 1 分前 11 秒前に起動 0.0.0.0:7001->7001/tcp mock-server 0d440be90935 mongo "docker-entrypoint.s..." 16 時間前 16 時間前 0.0.0.0:27017->27017/tcp mock-mongo ノードコンテナとmongoコンテナ間の接続状態を確認する $ docker exec -it モックサーバー /bin/bash $ カールデータベース サーバーとデータベースの接続が確立されたので、クライアントのデプロイを開始します。 nginxコンテナを構築し、ノードコンテナとの接続を確立する nginxを設定する前に、まずノードコンテナのエイリアス、nginxによって転送されるポート番号、nginxへのクライアントアクセス用のドメイン名とポート番号について合意する必要があります。
まずnginxイメージをプルしてコンテナを作成しましょう $ docker pull nginx:最新 $ docker run -p 90:80 --link mock-node:node nginx:latest --name mock-nginx # コンテナの接続ステータスを確認する $ docker exec -it mock-nginx /bin/bash $env # 次のデータが表示された場合、接続が成功したことを意味します NODE_PORT_7001_TCP=tcp://172.17.0.3:7001 NODE_PORT_7001_TCP_PORT=7001 1.9.4 より前のバージョン では、実行中のコンテナを見てみましょう $ docker ps コンテナID イメージ コマンド 作成ステータス ポート名 09644025d148 nginx "nginx -g 'daemon of..." 5 時間前 5 時間前 0.0.0.0:90->80/tcp mock-nginx ee780b903c64 mock-server:1.0.0 "/bin/bash" 約 1 分前 11 秒前に起動 0.0.0.0:7001->7001/tcp mock-server 0d440be90935 mongo "docker-entrypoint.s..." 24 時間前 24 時間前 0.0.0.0:27017->27017/tcp mock-mongo フロントエンドを独立して展開するため、nginx の設定を変更する必要があります。nginx の設定を変更する方法はいくつかあります。
現在の動作環境は17版15インチMacBook Proで、マウントには特殊な設定が必要なので、2番目の方法を採用しました。 設定ファイルの変更
$ docker cp mock-nginx:/etc/nginx/conf.d/default.conf ~/nginx/default.conf nginx設定ファイルに次の設定を追加します サーバー{ 場所 /mock-api/ { # node はコマンド サーバー コンテナーのエイリアスです proxy_pass http://node:7001/; } 場所 /mock { 自動インデックスオン; エイリアス /root/dist; } } コンテナ内の設定を上書きし、nginxを再起動します。 $ docker cp ~/nginx/default.conf モックnginx:/etc/nginx/conf.d/default.conf # コンテナに入る$ docker exec -it mock-nginx /bin/bash # nginx を再起動します。次のプロンプトが表示されたら、再起動が成功したことを意味します。$ nginx -s reload 2018/11/03 17:23:14 [通知] 68#68: シグナル処理が開始されました いよいよ最後のエキサイティングなステップです フロントエンドプロジェクトで要求されたネットワークドメイン名を変更し、パッケージ化してアップロードします。 //api-mocker/クライアント/設定 // module.exports > ビルド > serverRoot モジュール.エクスポート = { 建てる: { サーバールート: '127.0.0.1:90/mock-api' } } パッケージ化されたdistファイルをnginx設定の/root/distディレクトリにアップロードします。 $ docker cp ~/Sites/api-mocker/client/dist mock-nginx:/root > もちろん、nginxコンテナ構築はdockfileファイルを書くことでも実現できます。ここでは詳しく説明しません。設定ファイルをマウントしてローカルホストにログ出力します。興味があれば自分で試してみてください。コードをコピー テスト エキサイティングな設定はすべて完了しました。次はテストしてみましょう。 フロントエンドプロジェクトにアクセスします: http://127.0.0.1:90/mock フロントエンドプロジェクトが正常にデプロイされたことを示す次のインターフェースが表示されます。 アカウントを登録しようとすると、成功のプロンプトが表示されます。これは、プロジェクト全体が正常にデプロイされたことを意味します。 この時点で、デプロイメントは完了し、インターフェースをモックしてプロジェクトを記述することができます。花を散らしてください~~~ 要約する 初めて記事を書いて、初めてこのように展開するのは大変でした。自分の考えを整理したので、少しでもお役に立てれば幸いです。 最後に、私がよく使用する独自の docker コマンドと、このプロジェクトで使用する設定ファイルを添付します。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: React Stateの状態とライフサイクルの実装方法
>>: Centos7.3 で mysql5.7.18 をインストールして初期パスワードを変更する方法
アプリケーションをコンテナ化した後、Docker コンテナを起動すると、デフォルトで root ユー...
ウェブサイトを開発する場合、データを保存するためにデータベースを使用する必要があることがよくあります...
このコードは水平マージを示しています。 <!DOCTYPE html PUBLIC "...
Vue でフォーム フィールドを記述および検証する方法は多数あります。このブログでは、より一般的に使...
この記事では、画像テキストセグメンテーションを実装するためのNodeJSの具体的なコードを参考までに...
自己学習型ゲーム開発の道において、最も充実した瞬間は、自分でミニゲームを作り、友達と共有して試しにプ...
プロセス構造図Nginx はマルチプロセス構造です。マルチプロセス構造は、次のような Nginx の...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
この記事では、参考として MySQL 5.7.23 のインストール チュートリアルを記録します。 1...
目次確認する:例の検証と組み合わせるselect クエリ ステートメントはロックされませんが、sel...
この記事では、カード ウォーターフォール レイアウトを実現するための CSS3 列のサンプル コード...
序文Linux 環境で作業するエンジニアは、これらの面倒な命令とパラメータのコマンドラインにきっと驚...
目次使用されるPygame関数スクリーンの作成ヘビの作成ヘビを動かすゲームオーバーの処理食事を増やす...
フロントエンド開発部門は成長し、スタッフも増加し、技術も向上しています。 CSSer はフロントエン...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...