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ツールを通じて、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をインストールして、インストールしていない学友、自分の開発環境によって異なっているインストールの方式を採用してインストールして下さい、具体的な操作は教程を参考して、余計な説明をしません.
  • のインストールが成功したら、docker -vを通じてバージョン番号を確認することができます.
  • プロジェクトの準備
  • あなたのプロジェクトのルートディレクトリの下で、Docerfileファイルを追加します.このファイルは私達が自分でイメージをカスタマイズするために必要な依存項、環境、実行するコマンドなどを設定します.内容のフォーマットは以下の通りです.
     #           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 [:]
      :              ,FROM       Dockerfile      ,                Docker Hub   。
  • MAINTAINER
      :MAINTAINER 
      :MAINTAINER                   。
  • ADD
      :ADD  
      :ADD                           ,           ,      url,       Dockerfile           ,
  • WORKDIR
       :WORKDIR /path/to/workdir
       :WORKDIR      Dockerfile  RUN、CMD ENTRYPOINT           (   /  ),    Dockerfile         ,             WORKDIR     ,  WORKDIR /data,WORKDIR logs,RUN pwd          /data/logs。
  • RUN
       :① RUN    #    /bin/sh -c 
          ② RUN ["executable", "param1", "param2"] #    exec  ,       shell            ,             /bin/sh
       :RUN                 ,                ,          Dockerfile         ,RUN               ,   Docker                           ,          。
  • ENV
       :ENV  
       :ENV          , Dockerfile               RUN  ,                   ,                     docker run   –env =     。
       :                          ,              。
  • EXPOSE
      :EXPOSE  [ ...]
      :EXPOSE      Docker               ,Docker        (  –link  )       。
  • CMD
      : ① 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   ,         。
  • その中には他にもいくつかのキーワードがあります.USER、ENTRYPOINT、VOLUM、ONBUILDなどがあります.興味があれば、自分で研究してもいいです.
  • プロジェクトのルートディレクトリの下に.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のミラー
    > docker images
    
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      
  • を確認する.
  • cdは、プロジェクトのルートディレクトリにおいて、下記のコマンド
    > 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            
  • ミラーアップロード(ここでは公開倉庫にアップロードしてデモンストレーションします)
  • DocerHubに登録していません.DocerHub
  • を登録してください.
  • 登録docker
    > 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がインストールされていることを確認します.もしインストールされていないなら、関連文書を参照してください.インストールしないと、申し訳ないです.
     > 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アプリケーション、docker exec -it /bin/bash、効果は下記の通りです.
    結び目
    七月には火が流れ、プログラマーのいい日が来ます.もちろん皆さんのいい日がもうすぐ来ます.適当な温度はもっと高い生産量が必要です.dockerについての研究はまだ行われています.先端の発展のために、引き続き乾燥させましょう.結局、JSで解決できないものは何もありません.