@@ -354,7 +354,7 @@ Dockerfileができたらイメージをビルドして実行してみましょ
354354distrolessベースのDockerイメージの作成
355355~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
356356
357- distrolessはシェルが入っていおらず 、外部からログインされることもなく安全というGoogle製のDockerイメージです。標準Linuxに入っているようなツールも含めて、最小限にカットされています。Node.js、Java、Python、.netなど言語のランタイムだけが入ったバージョン、llvmベースのコンパイラで作成したコードを動かすだけのバージョン、何もないバージョンなど、いくつかのバリエーションが用意されています。今回はNode.jsを使います。
357+ distrolessはシェルが入っておらず 、外部からログインされることもなく安全というGoogle製のDockerイメージです。標準Linuxに入っているようなツールも含めて、最小限にカットされています。Node.js、Java、Python、.netなど言語のランタイムだけが入ったバージョン、llvmベースのコンパイラで作成したコードを動かすだけのバージョン、何もないバージョンなど、いくつかのバリエーションが用意されています。今回はNode.jsを使います。
358358
359359現在、8種類タグが定義されています。latestはLTSが終わるまでは10のままです。\ ``debug ``\ がついているものはデバッグ用のシェルが内蔵されています。
360360
@@ -367,7 +367,7 @@ distrolessはシェルが入っていおらず、外部からログインされ
367367* ``gcr.io/distroless/nodejs:12-debug ``
368368* ``gcr.io/distroless/nodejs:14-debug ``
369369
370- 一般的なの \ ``Dockerfile ``\ は、\ ``ENTRYPOINT ``\ がシェル、\ ``CMD ``\ がそのシェルから呼び出されるプログラムです。distrolessはシェルがなく、\ ``ENTRYPOINT ``\ にNode.jsが設定されている 、\ ``CMD ``\ にはJavaScriptのスクリプトを設定します。拡張を使わないコードなら簡単に動作します。先ほどの\ ``Dockerfile ``\ と、ビルド部分はまったく同じです。
370+ 一般的な \ ``Dockerfile ``\ は、\ ``ENTRYPOINT ``\ がシェル、\ ``CMD ``\ がそのシェルから呼び出されるプログラムです。distrolessはシェルがなく、\ ``ENTRYPOINT ``\ にNode.jsが設定されているので 、\ ``CMD ``\ にはJavaScriptのスクリプトを設定します。拡張を使わないコードなら簡単に動作します。先ほどの\ ``Dockerfile ``\ と、ビルド部分はまったく同じです。
371371
372372.. code-block :: docker
373373 :caption: Dockerfile
@@ -401,7 +401,7 @@ distrolessはシェルが入っていおらず、外部からログインされ
401401* CDNやオブジェクトストレージにアップする
402402* Dockerコンテナとしてデプロイする
403403
404- このうち、CDNやオブジェクトストレージへのアップロードはそれぞれのサービスごとの作法に従って行ます。ここではDockerコンテナとしてデプロイする方法を紹介します。Dockerコンテナにするメリットはいくつかあります。主にテスト環境の構築画しやすい点です 。
404+ このうち、CDNやオブジェクトストレージへのアップロードはそれぞれのサービスごとの作法に従って行ます。ここではDockerコンテナとしてデプロイする方法を紹介します。Dockerコンテナにするメリットはいくつかあります。主にテスト環境の構築がしやすい点です 。
405405
406406デプロイ用のバックエンドサーバーをDocker化する流れは今後も加速していくでしょう。しかし、フロントエンドが特定のマネージドサービスにアップロードする形態の場合、デプロイ手段がバックエンドと異なるため、別のデプロイ方式を取る必要が出てきます。ちょっとしたステージング環境や、開発環境を構築する際に、フロントエンドもDockerイメージになっていて本番環境のCDNをエミュレートできると、ローカルでもサーバーでも、簡単に一式のサービスが起動できます。PostgreSQLのイメージや、Redisのイメージ、クラウドサービスのエミューレータなどと一緒に、docker-composeで一度に起動するとテストが簡単に行えます。
407407
@@ -435,7 +435,7 @@ Dockerコンテナにする場合、ウェブサーバーのNginxのコンテナ
435435 COPY --from=builder /app/build public
436436 EXPOSE 80
437437
438- 配信用のnginxの設定です。シングルページアプリケーションにとって大切なパートが\ ``try_files ``\ です。シングルページアプリケーションでは1つのHTML/JSがあらゆるページを作り上げます。そしてその時にURLを書き換えます。しかし、そこでブラウザリロードをすると、JavaScritpによって作られた仮想的なURLを読みにこうとします 。この\ ``try_files ``\ を有効にすると、一度アクセスしに行って見つからなかった場合にオプションで設定したファイルを返せます。ここでは\ ``index.html ``\ を返すので、そこでReact Routerなどのフロントで動作しているウェブサービスが仕分けを行い、もしどこにもマッチしなければフロント側のRouterがエラーをハンドリングできます。
438+ 配信用のnginxの設定です。シングルページアプリケーションにとって大切なパートが\ ``try_files ``\ です。シングルページアプリケーションでは1つのHTML/JSがあらゆるページを作り上げます。そしてその時にURLを書き換えます。しかし、そこでブラウザリロードをすると、JavaScriptによって作られた仮想的なURLを読みにこうとします 。この\ ``try_files ``\ を有効にすると、一度アクセスしに行って見つからなかった場合にオプションで設定したファイルを返せます。ここでは\ ``index.html ``\ を返すので、そこでReact Routerなどのフロントで動作しているウェブサービスが仕分けを行い、もしどこにもマッチしなければフロント側のRouterがエラーをハンドリングできます。
439439
440440
441441.. code-block :: nginx
@@ -597,7 +597,7 @@ minikubeのセットアップが終わったら、kubectlをインストール
597597 kubernetes ClusterIP 10.96.0.1 < none> 443/TCP 35m
598598 typescript-kubernetes-service ClusterIP 10.107.196.16 < none> 80/TCP 7m10s
599599
600- 作成したDeployment(複数のコンテナアプリケーションをまとめで管理できるリソース )とService(複数のコンテナアプリケーションをロードバランスしてくれるネットワークリソース)が稼働していることを確認したら、今度は動作を確認します。手元のシェルで \ ``kubectl port-forward ``\ を実行し、Kubernetes上のアプリケーションを手元のブラウザで接続できるようにします。
600+ 作成したDeployment(複数のコンテナアプリケーションをまとめて管理できるリソース )とService(複数のコンテナアプリケーションをロードバランスしてくれるネットワークリソース)が稼働していることを確認したら、今度は動作を確認します。手元のシェルで \ ``kubectl port-forward ``\ を実行し、Kubernetes上のアプリケーションを手元のブラウザで接続できるようにします。
601601
602602.. code-block :: bash
603603
0 commit comments