あなたのNODEJSのドッカー画像のサイズを複数の
カバーイメージIan Taylor on Unsplash
Dockerはすぐに生成し、さまざまなプラットフォームにあなたのNODEJSアプリケーションのコンテナを展開する素晴らしいツールです.しかし、あなたが最終的なコンテナイメージのサイズをチェックしたならば、あなたはイメージがかなり重いとわかることができたかもしれません.MBまでの数百MBまでは珍しくありません.
このメモリサイズは異なる問題につながる.まず最初に、あなたのDockerイメージはあなたのマシンのディスク領域をたくさん消費します.第2の問題は、Docker Hubのようなレジストリからイメージをダウンロードすることは、ネットワーク接続によってかなりの時間がかかることです.あなたのアップロード帯域幅が通常あなたのアップロード帯域幅より数倍小さいので、この問題はあなたのイメージをアップロードするためにさらに悪くなります.
ご覧のように、あなたのDocker画像をできるだけ小さく保つ理由がたくさんあります.この記事では、異なるテクニックを使用してDocker画像のサイズを小さくする方法を示します.
必要条件
このチュートリアルでは、次のプログラムをマシンにインストールする必要があります. NodeJS Docker
始める
我々は、基本を使用しますAdonisJS この記事のアプリとDocker画像の中にパッケージします.
まず第一に、我々はadonisjsアプリを作成し、次のコマンドを実行し、プロンプトに応答します.プロジェクトの構造については
今すぐ我々のアプリケーションをDocker画像にパッケージを開始することができます.したがって、最初に新しいファイルを作成します
DockerFileが何をしているかを知っているので、私たちのイメージを構築する時間です.したがって、プロジェクトディレクトリ内に次のコマンドを実行します.
その後、実行して画像を一覧表示できます
ノードを使用する代わりに、我々のDockerイメージのサイズを減らす1つのアプローチは、ノードを使用している14のストレッチイメージ:14のアルパイン・ベースのイメージです.このイメージは、最小限のLinuxと他のベースイメージよりはるかに小さいアルパインLinuxに基づきます.
新しいベースイメージを使用するには
あなたが現在使用しているDockerイメージをリストするとき
マルチステージビルド
現時点では、プロジェクトフォルダのコンテンツ全体がイメージ内にコピーされ、プロジェクトの依存関係がインストールされます.その後、あなたのイメージはすべてのプロジェクト関連ファイルを含みます、しかし、それらのすべては生産のために必要です.たとえば、ソースファイルを必要としないし、devの依存関係もプロダクションイメージに含める必要はありません.
この問題を解決するには、多段ビルドを使用できます.まず、我々は再び更新されます
このアプローチを使用すると、すべての必要な依存関係を持つ完全なビルド環境を持つことができます.それでも、生産イメージを出荷することになるとき、我々は我々のアプリケーションを実行するために必要最小限のベースイメージと我々が必要とする生成されたファイルだけを使うことができます.
今、あなたは再び構築し、次のコマンドを使用してイメージをタグ付けすることができます
あなたは見ることができます、結果として生じるイメージのサイズは再び私のケースで減少しました.
多段ビルドについてもっと読みたい場合は、公式Dockerドキュメントを参照してくださいhere
私はあなたの記事とハッピーコーディングを楽しんでほしい🧑💻
Dockerはすぐに生成し、さまざまなプラットフォームにあなたのNODEJSアプリケーションのコンテナを展開する素晴らしいツールです.しかし、あなたが最終的なコンテナイメージのサイズをチェックしたならば、あなたはイメージがかなり重いとわかることができたかもしれません.MBまでの数百MBまでは珍しくありません.
このメモリサイズは異なる問題につながる.まず最初に、あなたのDockerイメージはあなたのマシンのディスク領域をたくさん消費します.第2の問題は、Docker Hubのようなレジストリからイメージをダウンロードすることは、ネットワーク接続によってかなりの時間がかかることです.あなたのアップロード帯域幅が通常あなたのアップロード帯域幅より数倍小さいので、この問題はあなたのイメージをアップロードするためにさらに悪くなります.
ご覧のように、あなたのDocker画像をできるだけ小さく保つ理由がたくさんあります.この記事では、異なるテクニックを使用してDocker画像のサイズを小さくする方法を示します.
必要条件
このチュートリアルでは、次のプログラムをマシンにインストールする必要があります.
始める
我々は、基本を使用しますAdonisJS この記事のアプリとDocker画像の中にパッケージします.
まず第一に、我々はadonisjsアプリを作成し、次のコマンドを実行し、プロンプトに応答します.プロジェクトの構造については
web
プロジェクト構造.npm init adonis-ts-app@latest hello-docker-world
次に、私たちはhello-docker-world
ディレクトリと実行して新しいアプリケーションをテストnode ace serve --watch
その後、あなたは開くことができますlocalhost:3333
お気に入りのブラウザで、あなたの新しいテストアプリケーションを表示する必要があります.今すぐ我々のアプリケーションをDocker画像にパッケージを開始することができます.したがって、最初に新しいファイルを作成します
Dockerfile
プロジェクトディレクトリ内に次のスニペットをファイルに貼り付けます.FROM node:14
WORKDIR /myapp
COPY . .
RUN npm install && node ace build --production
CMD node build/server.js
これは、Dockerレジストリからノードベースのイメージをプルします/myapp
, そして、ローカル作業ディレクトリの内容をイメージワーキングディレクトリにコピーします.その後、実行されますnpm insall
プロジェクトの依存関係をインストールし、生産のためのアプリケーションを構築する.コンテナイメージが実行されるとCMD
コマンドはコンテナ内で実行され、ウェブサーバを起動します.DockerFileが何をしているかを知っているので、私たちのイメージを構築する時間です.したがって、プロジェクトディレクトリ内に次のコマンドを実行します.
docker build -t adonisjs:full .
これは、プロジェクトディレクトリのDockerFileからの指示を調べ、指示に基づいてイメージを構築し、結果としてのイメージをタグ付けしますadonisjs:full
.その後、実行して画像を一覧表示できます
docker image ls
そして、あなたは、そのサイズで新しく作成されたイメージが表示されます.私の場合は1.13 GBでかなり重かったです.REPOSITORY TAG IMAGE ID CREATED SIZE
adonisjs full 8c35e9442e40 2 minutes ago 1.13GB
これはnode:14
Debianのストレッチwhitパッケージに基づいています.ノードを使用する代わりに、我々のDockerイメージのサイズを減らす1つのアプローチは、ノードを使用している14のストレッチイメージ:14のアルパイン・ベースのイメージです.このイメージは、最小限のLinuxと他のベースイメージよりはるかに小さいアルパインLinuxに基づきます.
新しいベースイメージを使用するには
Dockerfile
を参照してください.FROM node:14-alpine
WORKDIR /myapp
COPY . .
RUN npm install && node ace build --production
CMD node build/server.js
その後、我々は実行docker build -t adonisjs:alpine .
これは再び我々のプロジェクトからのイメージを構築するが、今回は、アルパインベースのイメージとタグに基づいてadonisjs:alpine
.あなたが現在使用しているDockerイメージをリストするとき
docker image ls
, あなたは、最初のイメージより非常に小さいあなたの新しいイメージを見ます.私の場合では、新しいイメージには303 MBだけがあります.REPOSITORY TAG IMAGE ID CREATED SIZE
adonisjs full 8c35e9442e40 2 minutes ago 1.13GB
adonisjs alpine 43e7a8874973 4 minutes ago 303MB
しかし、我々はより小さなイメージを得ることができて、以下のアプローチでより多くのスペースを節約することができます.マルチステージビルド
現時点では、プロジェクトフォルダのコンテンツ全体がイメージ内にコピーされ、プロジェクトの依存関係がインストールされます.その後、あなたのイメージはすべてのプロジェクト関連ファイルを含みます、しかし、それらのすべては生産のために必要です.たとえば、ソースファイルを必要としないし、devの依存関係もプロダクションイメージに含める必要はありません.
この問題を解決するには、多段ビルドを使用できます.まず、我々は再び更新されます
Dockerfile
次のスニペットを使用します.FROM node:14-alpine AS build
WORKDIR /myapp
COPY . .
RUN npm install && node ace build --production
FROM node:14-alpine
COPY --from=build /myapp/build /build
CMD node build/server.js
再び、これはnode:14-alpine
ベースイメージとしてイメージbuild
. 前の手順と同様に、我々はコピーして、我々のアプリケーションを構築するが、これらの手順の後に終了しません.ご覧のように、アプリケーションを構築した後に、新鮮なベースイメージを使用して、生成されたビルドディレクトリのみをbuild
私たちの新しい生産イメージになる新しいイメージへのイメージ.このアプローチを使用すると、すべての必要な依存関係を持つ完全なビルド環境を持つことができます.それでも、生産イメージを出荷することになるとき、我々は我々のアプリケーションを実行するために必要最小限のベースイメージと我々が必要とする生成されたファイルだけを使うことができます.
今、あなたは再び構築し、次のコマンドを使用してイメージをタグ付けすることができます
docker build -t adonisjs:multistage .
そして、実行してすべての画像を一覧表示docker image ls
. あなたは見ることができます、結果として生じるイメージのサイズは再び私のケースで減少しました.
REPOSITORY TAG IMAGE ID CREATED SIZE
adonisjs full 8c35e9442e40 2 minutes ago 1.13GB
adonisjs alpine 43e7a8874973 4 minutes ago 303MB
adonisjs multistage 6f91568fbe8f 6 minutes ago 117MB
ご覧のように、多段ビルドは、私たちが私たちの最終的なDockerイメージのサイズを10倍に減らすのを助けました.多段ビルドについてもっと読みたい場合は、公式Dockerドキュメントを参照してくださいhere
私はあなたの記事とハッピーコーディングを楽しんでほしい🧑💻
Reference
この問題について(あなたのNODEJSのドッカー画像のサイズを複数の), 我々は、より多くの情報をここで見つけました https://dev.to/matthri/reduce-the-size-of-your-nodejs-docker-images-by-a-multiple-5a75テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol