Docker は、ソフトウェア開発者やシステム管理者がコンテナを使用してアプリケーションを構築、実行、共有するためのプラットフォームです。コンテナは、Docker イメージを使用して構築された独自のファイル システム上の分離された環境で実行されるプロセスです。イメージには、アプリケーションを実行するために必要なものすべて (コンパイルされたコード、依存関係、ライブラリなど) が含まれています。イメージは Dockerfile ファイルを使用して定義されます。 Docker コンテナを作成するプロセスを定義するために、Docker 化またはコンテナ化という用語はよく使用されます。 コンテナが人気なのは、次のような利点があるためです。
この記事では、Docker イメージを最適化して軽量化する方法に焦点を当てます。 まず、React アプリケーションを構築してコンテナ化する例から始めましょう。 npx コマンドを実行して Dockerfile を作成すると、図 1 に示すファイル構造が得られます。 npx create-react-app アプリ --template typescript 図1: ファイル構造 基本的な Dockerfile (以下を参照) をビルドすると、1.16 GB のイメージが作成されます。 ノード:10から WORKDIR /appCOPY app /appRUN npm install -g webserver.localRUN npm install && npm run build EXPOSE 3000CMD webserver.local -d ./build 図2: 画像の初期サイズは1.16GBです 最適化の第一歩: 軽量ベースイメージの使用Docker Hub (パブリック Docker リポジトリ) には、それぞれ特性とサイズが異なる複数のイメージがダウンロード可能です。 通常、Alpine または BusyBox に基づくイメージは、他の Linux ディストリビューション (Ubuntu など) に基づくイメージに比べて非常に小さくなります。これは、Alpine イメージや同様のイメージが、必要最小限のパッケージのみを含むように最適化されているためです。下の画像では、Ubuntu、Alpine、Node、および Alpine ベースの Node イメージのサイズ比較を確認できます。 図3: ベースイメージの異なるサイズ Dockerfile を変更し、Alpine をベースイメージとして使用すると、イメージのサイズは 330 MB になります。 ノード:10-alpineから WORKDIR /appCOPY app /appRUN npm install -g webserver.localRUN npm install && npm run build EXPOSE 3000CMD webserver.local -d ./build 図4: 最適化の最初のステップの後、画像サイズは330MBになります 第2段階の最適化:多段階構築マルチステージ ビルドでは、Dockerfile で複数のベース イメージを使用し、コンパイルされた製品や構成ファイルなどをあるステージから別のステージにコピーできるため、不要なものを破棄できます。 この場合、React アプリケーションをデプロイするにはコンパイルされたコードが必要です。ソース ファイル、node_modules ディレクトリ、package.json ファイルなどは必要ありません。公開アカウント Nifengqibi をフォローし、pdf に返信して、必要な学習教材をすべてダウンロードしてください。 Dockerfile を次の内容に変更すると、最終的にイメージ サイズは 91.5 MB になります。最初のステージ (1 行目から 4 行目) のイメージは自動的に削除されず、Docker によってキャッシュに保持されるので、別のイメージ ビルド プロセスで同じステージを実行すると、イメージ ビルドが高速化されることに注意してください。したがって、最初のステージのイメージを手動で削除する必要があります。 node:10-alpine AS buildWORKDIR /appCOPY app /appRUN npm install && npm run build から node:10-alpineWORKDIR /appRUN から npm install -g webserver.localCOPY --from=build /app/build ./buildEXPOSE 3000CMD webserver.local -d ./build 図5: 最適化の2番目のステップ後の画像サイズは91.5MBです これで、2 つのステージを持つ Dockerfile ができました。最初のステージではプロジェクトをコンパイルし、2 番目のステージではアプリケーションを Web サーバーにデプロイします。ただし、Node コンテナーは Web ページ (HTML、CSS、JavaScript ファイル、画像など) を提供するのに最適な選択肢ではありません。最適なオプションは、Nginx や Apache などのサービスを使用することです。この例では、Nginx を使用します。 Dockerfile を以下のように変更すると、イメージのサイズは 22.4MB になります。このコンテナを実行すると、Web ページが問題なく正常に動作することがわかります (図 7)。 node:10-alpine AS buildWORKDIR /appCOPY app /appRUN npm install && npm run build から nginx:stable-alpine から --from=build /app/build /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"] にコピーします。 図6: 最適化の3番目のステップ後の画像サイズは22.4MBです 図7: 最終的なコンテナ実行結果 Docker イメージの最適化 (1.16GB から 22.4MB へ) に関する記事はこれで終わりです。より関連性の高い Docker イメージの最適化コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 制限を使用すると、MySQL のページングがどんどん遅くなるのはなぜですか?
>>: スケルトン スクリーンの読み込みプレースホルダー アニメーション効果を実装するための CSS + HTML (アニメーション付き)
Docker を使用して、柔軟なオンライン PHP 環境を構築します。場合によっては、他の人がすでに...
この記事では、Web ページ制作を学ぶ過程で習得すべきテクニックの一部を詳しく紹介します。これらの内...
公式サイトから mysql-5.7.19-winx64 をダウンロードします。これはシステムの 64...
HTTP ステータス コードステータス コードは 3 桁の数字と理由フレーズ (最も一般的なもの: ...
1. 需要正しい Cookie 配信と SSO テストを確実に実行できるように、ローカル テスト ド...
HTML では、色は 2 つの方法で表現されます。 1 つは、青の場合は blue のように色の名前...
目次setState は同期ですか、それとも非同期ですか?カスタム合成イベントと React フック...
目次参照と反応参照反応的RefとReactiveの違いshallowRef と shallowRea...
SQL JOIN 句は、テーブル間の共通フィールドに基づいて 2 つ以上のテーブルの行を結合するため...
フロントエンド開発者がよく遭遇する問題は、ユーザーに情報を提示するためのポップアップ ウィンドウを作...
目次1. バブルソートとは何か2. 例を挙げるラウンド1:第2ラウンド:第3ラウンド:第4ラウンド:...
####システム内の入出力の管理#### 1. システムの入力と出力のリダイレクトを理解する入力リダ...
この記事では、タブバーの切り替え効果を簡単に実現するためのJavaScriptの具体的なコードを参考...
シャドウスタイルにおけるフラッターとCSSの対応UIによって指定されたCSSスタイル 幅: 75px...
1. 機能主にコンポーネントの状態を保持したり、再レンダリングを回避したりするために使用されます。 ...