Docker展開Nodejsに基づくWebアプリケーション-実戦編
11872 ワード
Docker
dockerはオープンソースのアプリケーションコンテナエンジンであり、安全、移植、自動化の再現可能な配置を提供してくれます.dockerは仮想化技術を用いて、アプリケーションの実行環境を仮想化する.この方式は以下の利点がある.各展開のアプリケーションは一つの容器であり、互いに分離し、互いに影響しない. サーバは、dockerをインストールするだけで、構築されたアプリケーションの鏡像を実行できます.複雑なサーバ環境構成には関係しません.なぜなら、設定は特定のアプリケーションがあるミラーに配置すればいいです. 自動化配置とメンテナンスの煩雑な流れを簡略化しました.良いミラーロードをサーバーのdockerに構築したら、私達のアプリケーションを実行できます. はサーバのシステムリソースを十分に利用して、サーバー上で複数のコンテナを同時に実行することができます. dockerはc/sアーキテクチャを採用しており、Clientはインターフェースを通じてServerプロセスと通信して容器の構築を実現し、運行とリリースを行う.dockerの比較的重要な三つの核心概念は以下の通りである.ミラー(イメージ):読み取り専用のテンプレートは、アプリケーションの実行環境として理解され、プログラムの実行に依存する環境と基本的な構成が含まれています.ミラーは、階層(ベースミラーから開始する)ごとに特定の環境を含んでいます. 倉庫(repository):ミラーファイルを保管するための倉庫です.もしgitの倉庫に詳しいなら、分かりやすいと思います.私有倉庫と公有倉庫の区分がある. コンテナ:アプリケーションを実行する仮想コンテナは、私たちがミラーを実行するときに発生します.容器は自分のファイルシステム+分離のプロセス空間とプロセスを含んでいます. 前言
sharplookはビッグデータ分析によって、お客様が監視システムに存在するデータの収集が難しい、解析が難しい、処理が難しいというITのメンテナンス製品です.お客様に製品を配置する過程で、多くの環境構成と部品の取り付け及び複雑な依存項に関連しています.これらの煩雑な流れは設置配置の効率と製品品質を低下させました.これに基づいて、簡単に配置できるキットを開発しました.綺麗なセットアップの流れを提供します.製品はNuxt+Kooaの基礎構造を採用して開発しています.ここではnuxtを採用してSSR機能を提供しています.Nuxt.jsはVue.jsの汎用アーキテクチャに基づいています.ここでは以下のコンポーネントが集積されています. Vue 2 Vue-ROM Vuex Vue-mea また、Nuxt.jsは、Webpackとvue-loader、babel-loaderを使用してコードの自動化構築作業(例えば、パッケージ、コードの階層、圧縮など)を処理します.
私達のプロジェクトはNuxt.jsを中間部品としてUIレンダリングして、Kooを使って自分達のサーバーを起動します.koa 2はExpressの元のクラスの人馬によって作られたので、より小さく、より表現力に富んで、より強固なウェブフレームになるように努力しています.
どのように急速にこのようなプロジェクトを構築するかについて、学生の前に「vue-cli」でvue-cliの使用を紹介しました.このプロジェクトはvue-cliツールを通じて、
なぜdockerを選んで私達のnodeサービスを展開しますか?前に紹介しましたが、nodeのwebアプリケーションに基づく展開環境は複雑ではありません.Node.jsだけをプラットフォームとして必要としてもいいです.依頼の書類が多すぎて、しかも比較的大きいので、業界では特に使いやすいオープンソースnode包装ツールがまだありません.フロントエンドの学友はすべて知っていて、webpackは強力な資源ロードの構築の包装ツールです.プロジェクトファイルを一つのdistファイルの下に包装するだけで、包装したファイルの容量が小さく、ファイル間の依存問題を解決しました.公共コードライブラリを抽出して、生産環境はdistフォルダを配置するだけでいいです.しかし、Nodejsプログラムの関連している依存のカバンと資源は包装することができなくて、nodeサービスが開けた後にただ1つのnodeの過程だけです.じゃ、私達はどうやってnodeプログラムを展開しますか?包装ができない以上、その書類を全部配置するしかないです.(他の問題があるかもしれませんが、小生も研究中です.大神さんがアドバイスしてくれます.)ので、小生さんはdockerに入れて配置して、生産環境のnodeバージョンの不一致などの問題がないようにしたいです.次はどうやってdockerでNodeプロジェクトを展開するかを皆さんにお伝えします.
実戦
以下は戦備状態に入ります.皆さん、大脳とコンピューターを用意してください.左手と右手に沿ってゆっくりと動作します.
環境の準備 dockerをインストールして、インストールしていない学友、自分の開発環境によって異なっているインストールの方式を採用してインストールして下さい、具体的な操作は教程を参考して、余計な説明をしません. のインストールが成功したら、 プロジェクトの準備あなたのプロジェクトのルートディレクトリの下で、Docerfileファイルを追加します.このファイルは私達が自分でイメージをカスタマイズするために必要な依存項、環境、実行するコマンドなどを設定します.内容のフォーマットは以下の通りです. は、 FROM MAINTAINER ADD WORKDIR RUN ENV EXPOSE CMD その中には他にもいくつかのキーワードがあります.USER、ENTRYPOINT、VOLUM、ONBUILDなどがあります.興味があれば、自分で研究してもいいです.プロジェクトのルートディレクトリの下に ミラーを構築は、現在のところ、ローカルdockerのミラー を確認する. cdは、プロジェクトのルートディレクトリにおいて、下記のコマンド ミラーを起動して、テストが成功しましたか? ミラーアップロード(ここでは公開倉庫にアップロードしてデモンストレーションします) DocerHubに登録していません.DocerHub を登録してください.登録docker に指定できます. にアップロードする.アップロードが成功したら、 ミラーをダウンロードは 生産の配置
前に述べましたが、倉庫にアップロードされたミラーをダウンロードして配置してもいいですが、もしミラーが大きいならば、または配置環境が大きくてネットが繋がらないなら、ひざまずいてもいいですか?私たちはもう一つの方法を取って、開発したミラー像を直接にインストールディスクに保存して、お客様の生産環境に行ってから、ミラーバックをアップロードして、サーバーのdockerにロードすればいいです.は開発環境でパッケージ化され、 生産サーバにdockerがインストールされていることを確認します.もしインストールされていないなら、関連文書を参照してください.インストールしないと、申し訳ないです. が見えます.は、 を確認しやすいです.戦功、訪問配置のdockerアプリケーション、
結び目
七月には火が流れ、プログラマーのいい日が来ます.もちろん皆さんのいい日がもうすぐ来ます.適当な温度はもっと高い生産量が必要です.dockerについての研究はまだ行われています.先端の発展のために、引き続き乾燥させましょう.結局、JSで解決できないものは何もありません.
dockerはオープンソースのアプリケーションコンテナエンジンであり、安全、移植、自動化の再現可能な配置を提供してくれます.dockerは仮想化技術を用いて、アプリケーションの実行環境を仮想化する.この方式は以下の利点がある.
sharplookはビッグデータ分析によって、お客様が監視システムに存在するデータの収集が難しい、解析が難しい、処理が難しいというITのメンテナンス製品です.お客様に製品を配置する過程で、多くの環境構成と部品の取り付け及び複雑な依存項に関連しています.これらの煩雑な流れは設置配置の効率と製品品質を低下させました.これに基づいて、簡単に配置できるキットを開発しました.綺麗なセットアップの流れを提供します.製品はNuxt+Kooaの基礎構造を採用して開発しています.ここではnuxtを採用してSSR機能を提供しています.Nuxt.jsはVue.jsの汎用アーキテクチャに基づいています.ここでは以下のコンポーネントが集積されています.
私達のプロジェクトはNuxt.jsを中間部品としてUIレンダリングして、Kooを使って自分達のサーバーを起動します.koa 2はExpressの元のクラスの人馬によって作られたので、より小さく、より表現力に富んで、より強固なウェブフレームになるように努力しています.
どのように急速にこのようなプロジェクトを構築するかについて、学生の前に「vue-cli」でvue-cliの使用を紹介しました.このプロジェクトはvue-cliツールを通じて、
nuxt-community/koa-template
テンプレートを使って、vue init nuxt-community/koa-template
快速に構築されました.具体的なコードロジックは、ここでは説明を省略します.なぜdockerを選んで私達のnodeサービスを展開しますか?前に紹介しましたが、nodeのwebアプリケーションに基づく展開環境は複雑ではありません.Node.jsだけをプラットフォームとして必要としてもいいです.依頼の書類が多すぎて、しかも比較的大きいので、業界では特に使いやすいオープンソースnode包装ツールがまだありません.フロントエンドの学友はすべて知っていて、webpackは強力な資源ロードの構築の包装ツールです.プロジェクトファイルを一つのdistファイルの下に包装するだけで、包装したファイルの容量が小さく、ファイル間の依存問題を解決しました.公共コードライブラリを抽出して、生産環境はdistフォルダを配置するだけでいいです.しかし、Nodejsプログラムの関連している依存のカバンと資源は包装することができなくて、nodeサービスが開けた後にただ1つのnodeの過程だけです.じゃ、私達はどうやってnodeプログラムを展開しますか?包装ができない以上、その書類を全部配置するしかないです.(他の問題があるかもしれませんが、小生も研究中です.大神さんがアドバイスしてくれます.)ので、小生さんはdockerに入れて配置して、生産環境のnodeバージョンの不一致などの問題がないようにしたいです.次はどうやってdockerでNodeプロジェクトを展開するかを皆さんにお伝えします.
実戦
以下は戦備状態に入ります.皆さん、大脳とコンピューターを用意してください.左手と右手に沿ってゆっくりと動作します.
環境の準備
docker -v
を通じてバージョン番号を確認することができます. # node, v8.0.0
FROM node:8.0.0
# ( )
MAINTAINER EOI
# copy container( ) app
ADD . /app/
# cd app
WORKDIR /app
#
RUN npm install
RUN npm rebuild node-sass --force
#
ENV HOST 0.0.0.0
ENV PORT 8000
#
EXPOSE 8000
# , npm run start
CMD ["npm", "start"]
Dockerfile
ファイルのキーワードについて、次のように説明しています. :FROM [:]
: ,FROM Dockerfile , Docker Hub 。
:MAINTAINER
:MAINTAINER 。
:ADD
:ADD , , url, Dockerfile , 。
:WORKDIR /path/to/workdir
:WORKDIR Dockerfile RUN、CMD ENTRYPOINT ( / ), Dockerfile , WORKDIR , WORKDIR /data,WORKDIR logs,RUN pwd /data/logs。
:① RUN # /bin/sh -c
② RUN ["executable", "param1", "param2"] # exec , shell , /bin/sh
:RUN , , Dockerfile ,RUN , Docker , 。
:ENV
:ENV , Dockerfile RUN , , docker run –env = 。
: , 。
:EXPOSE [ ...]
:EXPOSE Docker ,Docker ( –link ) 。
: ① CMD ["executable", "param1", "param2"] # exec ,
② CMD ["param1", "param2"] # ENTRYPOINT ,
③ CMD [ | ] # /bin/sh -c
:CMD , Dockerfile , CMD , CMD 。 ENTRYPOINT ,CMD ENTRYPOINT , CMD ENTRYPOINT 。
:RUN CMD , RUN docker build , CMD docker run , exec , 。
.dockerignore
ファイルを追加します.このファイルの役割は.gitignore
ファイルと似ています.ミラーに添付されたファイルを見落とすことができます.書き方、フォーマット、.gitignore
と同じです.行は無視されています.本プロジェクトの追加の無視は以下の通りです. .DS_Store
npm-debug.log*
selenium-debug.log
.nuxt/
/package-lock.json
*.tar
*.md
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
> docker build -t deploy:1.0 .
Sending build context to Docker daemon 1.436GB
.... 1000 。
Successfully built d8f0875e967b
Successfully tagged deploy:1.0
deploy
はミラー名であり、1.0
はミラーのバージョン番号であり、これにより、新しいミラーを構築することに成功しました.docker images
を通じて、ミラー画像を確認することができます.> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
deploy 1.0 d8f0875e967b 3 minutes ago 2.11GB
> docker run -d -p 9000:8000 deploy:1.0
8aec5ee037bb253901d2c2e02c7be546580546c493576139f3789fb660f3401d
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8aec5ee037bb deploy:1.0 "npm start" 57 seconds ago Up 56 seconds 0.0.0.0:9000->8000/tcp amazing_bassi
docker run -d -p 9000:8000 deploy:1.0
において、-d
はバックグラウンド動作を示し、-p 9000:8000
は、ローカル9000ポートがコンテナ内の8000ポートに隠れていることを指定する.deploy:1.0
は私たちが実行したいイメージのための鏡です.docker ps -a
を通して、dockerのプロセス(容器の運行自体は特殊なプロセス)の運行状況を調べて、私達の容器はすでに運行していることを発見しました.ローカルアクセスlocalhost:9000
.docker logs
を通して、私たちの容器内のアプリケーションの実行ログを確認することができます.docker logs
> docker logs 8aec5ee037bb
npm info it worked if it ends with ok
npm info using [email protected]
npm info using [email protected]
npm info lifecycle [email protected]~prestart: [email protected]
npm info lifecycle [email protected]~start: [email protected]
> [email protected] start /app
> node ./server/index.js
Server listening on 0.0.0.0:8000
DONE Compiled successfully in 9310ms06:55:56
> Open http://0.0.0.0:8000
docker stop
docker start
docker restart
docker rm -f
> docker login
Username: XXX
Password: XXX
Login Succeeded
docker tag /
は、アップロードする前にミラーにタグを付けなければなりません.namespace
は、あなたのdocker Id > docker tag deploy:1.0 lzqs/deploy:1.0
docker push /
は、ミラーをdockerの公開倉庫> docker push lzqs/deploy:1.0
docker logout
は終了し、https://hub.docker.com/
にログインしてアップロードのミラーを確認する.docker pull /
を通して私達の鏡像をダウンロードします.> docker pull lzqs/deploy:1.0
前に述べましたが、倉庫にアップロードされたミラーをダウンロードして配置してもいいですが、もしミラーが大きいならば、または配置環境が大きくてネットが繋がらないなら、ひざまずいてもいいですか?私たちはもう一つの方法を取って、開発したミラー像を直接にインストールディスクに保存して、お客様の生産環境に行ってから、ミラーバックをアップロードして、サーバーのdockerにロードすればいいです.
docker save / .tar
> docker save lzqs/deploy:1.0 > deploy.tar
はここでls
はカタログの下でdeploy.tarのファイルを生成していることを発見します.このファイルのcopyを生産環境サーバに展開します. > docker load < deploy.tar
007ab444b234: Loading layer [==================================================>] 129.3 MB/129.3 MB
4902b007e6a7: Loading layer [==================================================>] 45.45 MB/45.45 MB
bb07d0c1008d: Loading layer [==================================================>] 126.8 MB/126.8 MB
ecf5c2e2468e: Loading layer [==================================================>] 326.6 MB/326.6 MB
7b3b4fef39c1: Loading layer [==================================================>] 352.3 kB/352.3 kB
677f02386f07: Loading layer [==================================================>] 137.2 kB/137.2 kB
7333bb4665b8: Loading layer [==================================================>] 55.66 MB/55.66 MB
e292e64ffb88: Loading layer [==================================================>] 3.757 MB/3.757 MB
ee76d0e6f6d9: Loading layer [==================================================>] 1.436 GB/1.436 GB
33dca533c6e5: Loading layer [==================================================>] 331.8 kB/331.8 kB
24630015679d: Loading layer [==================================================>] 35.18 MB/35.18 MB
Loaded image: lzqs/deploy:1.0
のロードに成功したら、deploy.tar
にロードされたミラー> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lzqs/deploy 1.0 d8f0875e967b About an hour ago 2.115 GB
docker images
ミラー画像を実行し、成功したら、外部サーバの9000ポートにアクセスし、lzqs/deploy
> docker run -d -p 9000:8000 lzqs/deploy
1d0db9a5d0c8826171e501b0e86afd444fca8144b1105e63dae8d621bdda7a77
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d0db9a5d0c8 lzqs/deploy:1.0 "npm start" About a minute ago Up About a minute 0.0.0.0:9000->8000/tcp goofy_curran
:9000
は容器に入って実行できます.内部ファイルとデバッグ> docker exec -it 1d0db9a5d0c8 /bin/bash
root@1d0db9a5d0c8:/app#
docker exec -it /bin/bash
、効果は下記の通りです.結び目
七月には火が流れ、プログラマーのいい日が来ます.もちろん皆さんのいい日がもうすぐ来ます.適当な温度はもっと高い生産量が必要です.dockerについての研究はまだ行われています.先端の発展のために、引き続き乾燥させましょう.結局、JSで解決できないものは何もありません.