Containerize生産のためのDockerとアプリケーションを反応させる


Docker概観
Dockerは、開発、出荷、および実行中のアプリケーションのオープンプラットフォームです.Dockerはあなたのアプリケーションとインフラストラクチャの間の隔離を提供することにより、ソフトウェアの迅速な配信を保証します.Dockerパッケージとは、コンテナと呼ばれる緩やかに隔離された環境の中ですべてを実行します.
鍵語
イメージ-あなたのアプリケーション(OOPのクラスのように)を実行するために必要なすべて(アプリケーションコード、必要なライブラリ、ソフトウェア依存、構成など)を含む完全なパッケージ
コンテナ- OOPのオブジェクトと同じように、イメージのインスタンス
ボリューム-イメージは、ボリュームを使用してデータを保持する読み取り専用です.最も簡単な条件で、あなたはDockerイメージでフォルダ(ホストOS上で)をデータを読み書きするために共有します.
dockerfile -画像の青写真.これは、あなたが構築しようとしているイメージの中に何があるかを定義するところです.OS(例えばubuntu 16)、ソフトウェア(例えばノード)などのように.
タグ-今ちょうどそれをリテラル用語で考慮します.
私は、あなたがあなたがそうしないならば、あなたがDockerを使用してコンテナ化したいあなたの反応アプリケーションを準備しておくと仮定します.you can clone this sample React application そして、続いてください.

ステップ1 :インストール


Download and install docker

ステップ2 :設定ファイルの準備


次の2つの設定ファイルを作成する必要があります.
  • nginx ( webserver )
  • Docker ( Dockerのイメージを作成する)
  • 金研
    反応のビルドファイルは、静的な(HTML、CSS、JSなど)ファイルであり、NGinx、Apache、OpenListespeedなどの静的ファイルを提供するWebサーバーが必要です.
    あなたの反応アプリの中で、別のディレクトリを作成し、それを名前nginx . NGinxディレクトリ(ちょうど作成される)の中で、新しいファイルを作成して、それを命名してくださいnginx.conf . また、次のコマンド(1つずつそれを達成するために)に使用することができます.
    cd my-app
    mkdir nginx
    cd nginx
    touch nginx.conf
    
    “nginx . conf”ファイルを編集し、次のコードを追加します.
    server {
    
      listen 80;
    
      location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    
        # to redirect all the requests to index.html, 
        # useful when you are using react-router
    
        try_files $uri /index.html; 
      }
    
      error_page   500 502 503 504  /50x.html;
    
      location = /50x.html {
        root   /usr/share/nginx/html;
      }
    
    }
    
    このコードブロックの要点は、NGINXがポート80をlistenするように指示していることで、すべてのリクエストを"index . html "にリダイレクトし、ルートを/usr/share/nginx/html "とすることです.
    Dockerfile
    アプリケーションディレクトリ内に新しいファイルを作成し、Dockerfile.prod に次のコードを追加します.
    # stage1 - build react app first 
    FROM node:12.16.1-alpine3.9 as build
    WORKDIR /app
    ENV PATH /app/node_modules/.bin:$PATH
    COPY ./package.json /app/
    COPY ./yarn.lock /app/
    RUN yarn
    COPY . /app
    RUN yarn build
    
    # stage 2 - build the final image and copy the react build files
    FROM nginx:1.17.8-alpine
    COPY --from=build /app/build /usr/share/nginx/html
    RUN rm /etc/nginx/conf.d/default.conf
    COPY nginx/nginx.conf /etc/nginx/conf.d
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]
    
    新しいファイルを作成し、.dockerignore 追加node_modules インサイド.これは単にDockerに無視してくださいnode_modules ディレクトリ.
    それで、あなたのディレクトリ構造は
    my-app
    │   Dockerfile.prod
    │   .dockerignore    
    │
    └───nginx
          nginx.conf
    
    
    解説
    ステージ1
  • マルチステージDockerビルドを使用する( Docker V 17 +)
  • FROM どのような基本イメージを使用するかを指示するDocker Hub
  • WORKDIR はワーキングディレクトリ(イメージの中でホストOSではない)を指定するために使われる.
  • ENV PATH パスにnodeoundモジュールを追加する
  • COPY をコピーするpackage.json カレントディレクトリ(ホスト上)から作業ディレクトリ(イメージ中).
  • RUN はコマンドを実行するために使いますYarn packageに含まれる依存関係をインストールするにはJSON
  • COPY を実行し、ホストOSからすべてのコードをイメージディレクトリのワーキングディレクトリにコピーします
  • ランyarn build 我々のアプリを構築するには
  • パッケージをコピーします.JSON最初に依存関係をインストールし、コピーしないnode_modules 画像に.これは、dockerの優れたキャッシュシステムを活用し、ビルド時間を減らすことです.
    ステージ2
    最初の段階では、パッケージをコピーしました.作業ディレクトリにJSON、依存関係をインストールし、コードをコピーし、最後の静的ファイルを構築しました.ステージ2 :
  • 用途Nginx ベースイメージとして.( nginx がイメージであり1.17.8-alpine がタグです.それはあなたが使用したいNGinxベースのイメージの特定のバージョン/リリースを教えているようなものです.
  • ステージ1から4にビルドファイルをコピーします/usr/share/nginx/html ( nginxが提供するデフォルトディレクトリ)
  • デフォルトのnginx設定ファイルを/etc/nginx/conf.d/default.conf
  • 以前に作成した設定ファイルをDockerイメージにコピーします
  • 用途EXPOSE 容器のポートを露出させる.つの落とし穴は、実際にはポートを公開していないということです、むしろそれはドキュメントのためだけです
  • ランNginx フォアグラウンドではなく、デーモン(バックグラウンドでのE )として.
  • 両方CMD and RUN はコマンドを実行するために使われる.違いはRUN がイメージビルドステップですCMD コマンドはコンテナが起動時にデフォルトで実行されます.
    ステップ3:ビルドとタグイメージ
    アプリケーションのルートディレクトリから、次のコマンドを実行してDockerイメージをビルド&タグします.docker build -f Dockerfile.prod -t my-first-image:latest .
  • -f はファイル名を指定するために使われる.指定しない場合は、ファイル名をDockerfile - これはビルドコマンドが現在のディレクトリでデフォルトで探すものです.
  • -t は画像のタグ付けに使われる.あなたのイメージをすることができますタグをする方法
  • . 最後に重要で、カレントディレクトリを使用するようDockerに指示する必要があります.
  • **ステップ4 :コンテナを実行する
    最後のステップは、ビルドされたイメージ(容器として)を実行することですdocker run -it -p 80:80 --rm my-first-image:latest
  • -it インタラクティブモード
  • -p ポートを公開してバインドするにはここでは、コンテナのポート80を公開し、ホストマシンのポート80と結合します.一つ目はマシン(ホストOS )で、2番目はDockerイメージコンテナーです.例えば、あなたが使うなら-p 1234:80 次に、あなたが行く必要がありますhttp://localhost:1234 あなたのブラウザで.
  • --rm 容器を取り外す
  • my-first-image:latest 私たちがコンテナを走らせるイメージのタグ
  • 今すぐあなたのブラウザを開き、行くhttp://localhost そして、あなたのアプリは、Dockerから提供されて表示されます.あなたの反応アプリケーションコードに変更を加えるならば、あなたはイメージを再構築する必要があります(ステップ3)そして、それをもう一度実行してください(ステップ4).
    エキストラ
  • ランdocker image ls マシン上のすべての画像の一覧を表示するには
  • ランdocker container ls 全てのコンテナを見る
  • ランdocker system prune コンテナを刈り取るには(このコマンドを使用している間は注意してください.
  • 読み込むDocker getting starting guide
  • 接続しましょう
    リンケディン
    Twitter