フロントエンドとバックエンドの開発のためのDocker -展開のためのローカルテストのためだけに.


我々は現在、フロントエンドとバックエンド我々のローカルコンピュータ上で完璧に動作している.あなたが前の作品を終えたならば、あなたがこのガイドからより多くを得ることができるが、それは一般的に役に立つこともありえます.このセクションの目的は、近代的な展開のためのWebアプリケーションを準備することです.
我々は簡単にすべてのコンピュータ上でフロントエンドとバックエンドを実行し、必要に応じてフレームワークをスケールすることができます.いくつかの方法があります.それは近年非常に成功しているので、我々はこのシリーズのDockerを使用します.このガイドは4つのセクションに分けられます.
  • Dockerは何ですか?
  • フロントエンドバックエンド一度にすべてを実行している

  • チェンクは何ですか?
  • Dockerがウェブ上でどこにいるのかについて、非常に多くの説明があります.私はメインパーツに連絡する必要がありますが、私はここでsubtletiesに行くことはありません.私の主要な懸念は、このビデオからとられました.
    コンテナドキュメントとしてバックエンドを作り、ローカルで試してみました.現在、我々はそれを走らせるために雲の中で点を発見する必要があります.我々が現在経験している主要なテストは、我々が我々のバックエンドが実際にそれがローカルにするように実際に雲で動くことを保証することができないということです.雲気候が我々の近隣気候に等しいならば、我々はそのような保証をすることができました.私たちの近所と雲の気候の間に穴を得るために少し考えられるように我々は我々が必要とするクラウドサプライヤーを伝える必要があります.それにもかかわらず、クラウドサプライヤーとして、1000000デザイナーを持つことはできませんどのように個々の雲の配置が似ている必要がありますあなたに明らかに.それがクラウドサプライヤーが様々なバンドルを提供する理由です.彼らは、(仮想)マシンを与え、我々のアプリケーションを実行するための静的な気候を与えるの間に変動する.個々のマシンの発生が起こるならば、それは現在、我々の近くの機械としてマシンを運ぶことを確実とするために、デザイナーに依存しています.それはあまりにも高価な時間であり、我々は実際に全体のマシンを必要としないようにさらに高価です.我々は、単に我々のコンテナ記録を走らせる点を必要とします.我々が静的気候で我々を供給することが起こるならば、我々は現在我々の近所気候が何か非常に類似した行動をすることを確実とする必要があります.これはすべてのことを考慮に入れる価値がない.正確にここでDockerに役立つ.
    Dockerは共有信念を提供し、本物の鋼鉄トレーラーと本物の感覚になります.バナナの組織だけでどのようにコンパートメントにバナナを取得する上で強調する.それが閉じられるときはいつでも、そこにあることは少しの違いもありません.それは基本的に、それぞれのすべてのコンパートメントのように扱われ、配信機関はどのように機能を実現する.Dockerは十分に適応可能な標準を与えますが、さらに、製品がそれがローカルにする同様の方法で雲で動くのを確実にします.
    我々は、アプリケーションのDocker画像を作るためにDockerを使用します.単に我々はコンパクトディスクにそれをコピーします.その絵はDockerファイルを使用してアセンブルされます.その絵は、それからDockerコンパートメントの中で利用されることができます.
    Dockerは驚くべき資産であり、より価値のあるハイライト(例えばスケーリング)を与えます.とにかく、これはここで重要でありません.

    フロントエンドのためのDocker
    フロントエンドをdockerizeしようとする前に、dockerを設定してください.さらに、config . configで.NuxtJSは、我々のベースURLを調べる必要があります.私たちがクラウドで我々のアプリを展開するなら、それはまだ我々のバックエンドがlocalhostでアクセス可能であると信じています:8080.そういうわけで、我々はあらゆる環境特有の要素を取り除かなければなりません.

    環境変数の抽出
    フロントエンドをdockerizeしようとする前に、dockerを設定してください.さらに、フロントエンドでは、バックエンドのURLである環境変数が一つしかありません.nuxt.config.jsパッケージでは、プロキシモジュールを使用しています.残っているのは環境変数を含むことです.
    値が利用できないならば、我々はそれをデフォルト値(http://localhost:8080/)にセットしました、そして、我々は設定で我々のベースURLをチェックしなければなりません.Nuxtjs私たちがクラウドで我々のアプリを展開するならば、それはまだ我々のバックエンドがlocalhostでアクセス可能であると信じています:8080.その結果、環境変数を削除しなければなりません.
    proxy: {
        '/api/': process.env.PROXY_API || 'http://localhost:8080/'
    },
    
    次に、フロントエンドフォルダで、フロントエンドと呼ばれるdockerfileを作ります.Dockerfile.Dockerファイルのコードは次の通りです.
    FROM node:alpine3.12
    
    # Create an application directory
    RUN mkdir -p /app
    
    # The /app directory should act as the main application directory
    WORKDIR /app
    
    # Copy the app package and package-lock.json file
    COPY frontend/package*.json ./
    
    # Install node packages
    RUN npm install
    
    # Copy or project directory (locally) in the current directory of our docker image (/app)
    COPY frontend/ .
    
    # Build the app
    RUN npm run build
    
    # Expose $PORT on container.
    # We use a varibale here as the port is something that can differ on the environment.
    EXPOSE $PORT
    
    # Set host to localhost / the docker image
    ENV NUXT_HOST=0.0.0.0
    
    # Set app port
    ENV NUXT_PORT=$PORT
    
    # Set the base url
    ENV PROXY_API=$PROXY_API
    
    # Set the browser base url
    ENV PROXY_LOGIN=$PROXY_LOGIN
    
    # Start the app
    CMD [ "npm", "start" ]
    
    各行についてのコメントとコメントは、何が起こっているかをうまく理解しなければならない.画像を作成するには、単にこのコマンドを端末に入力します.プロジェクトのルートディレクトリから実行してください.docker build --file=frontend/frontend.dockerfile -t playground-web-frontend .完全な停止は非常に重要です—file→ ビルド用のファイル.-t→ 我々のイメージを特定するために、我々はそれをタグ付けします.→ ビルドコンテキスト(アプリケーション)の場所.例ではカレントディレクトリを参照します.
    dockerizeやbackendすることができるまで、我々はフロントエンドのためにしたように、すべての環境固有の属性を削除する必要があります.バックエンドでは、2つの環境固有の変数があります.フロントエンドのアドレスとサーバのアドレス.
    プログラムはすべての環境固有の変数を設定します.
    アセットファイルはリソースフォルダーにあります.各ラインにはキーと値が含まれます.値については、環境変数(Dockerが提供する)または既定値を使用します.次のコードを入れます.

    spring.data.mongodb.uri=${MONGODB_URI:mongodb://localhost:27017/todo}server.port=${PORT:8080}


    なぜ私たちはすでにMOGODBのURIを設定していないのでしょう.それは、春がMongoDBがそのURIで見つかるとデフォルトで考えたからです.一度それを置くと変更されます.それが我々がそれを抽出している理由です.Herokuはチュートリアルの次のセクションでサーバーポートを使用できます.
    FROM openjdk:15
    
    # Create an application directory
    RUN mkdir -p /app
    
    # The /app directory should act as the main application directory
    WORKDIR /app
    
    # Copy or project directory (locally) in the current directory of our docker image (/app)
    COPY backend/build/libs/*.jar ./app.jar
    
    # Expose $PORT on container.
    # We use a varibale here as the port is something that can differ on the environment.
    EXPOSE $PORT
    
    # Start the app
    CMD [ "java", "-jar", "./app.jar" ]
    
    各行のコメント/コメントはDockerFileで何が起こっているかを明確に明らかにするべきです.
    フロントエンドとバックエンドDockerFilesの間にはかなりの相違があります.前者はアプリケーションのコードを保持します.バックエンドに改良を加えるならば、我々は最初にこのコマンドでそれを構築しなければなりません.gradle build画像を作成するには、単にこのコマンドを端末に入力します.再び、プロジェクトのルートディレクトリから実行してください.docker build --file=backend/backend.dockerfile -t playground-web-backend .—file→ ビルド用のファイル.-t→ 我々のイメージを特定するために、我々はそれをタグ付けします.→ ビルドコンテキスト(アプリケーション)の場所.例ではカレントディレクトリを参照します.
    我々は、我々が我々が必要とするすべてを持つ今、それを始めるために、Docker Composeを使います.Dockerを構成するコマンドは、環境変数を設定するだけでなく、使用するサービス(およびイメージ)を起動するようDockerに指示します.プロジェクトのルートフォルダで、docker-compose.ymlという新しいファイルを作成します.
    version: '1'
    services:
      playground-web-db:
        image: mongo:4.4
        environment:
          MONGO_INITDB_DATABASE: playground-web
        ports:
          - 27017:27017
      playground-web-frontend:
        image: playground-web-frontend:latest
        environment:
          PORT: 3000
          PROXY_API: http://playground-web-backend:8080/
        ports:
          - 3000:3000
      playground-web-backend:
        image: playground-web-backend:latest
        environment:
          MONGODB_URI: mongodb://playground-web-db:27017/playground-web
        ports:
          - 8080:8080
    
    アプリケーションの実行を実行するには、次の手順に従います.docker-compose -f docker-compose.yml upしたがって、アプリケーションをアップロードして実行します.