コンテナーを使用したマルチステージ ビルド
システムは、完成した状態で出荷するとすぐに非常に大きくなります。これには、ビルドと、多くの場合、ビルドおよびテスト環境が含まれます。出荷するファイルの抽出は問題なくても、時間がかかります。
コンテナーは、これを自動的に行う可能性を提供します。
ここでは、1 つのファイルで複数のコンテナーを定義するオプションがあります。 JavaScript で作成され、Node.js で構築された Web サイトが良い例です。
例:
Node.js:~ 400 Mbyte – 600 Mbyte
ウェブサーバー nginx:~ 20 Mbyte
ウェブサイト:~ 2 Mbyte
コンテナーとしてのシステム全体は合計で 600 MB を超えますが、必要なのは 22 MB (Web サーバー + Web サイト) だけです。さらに、生産的な操作には必要のないソフトウェアが存在するため、システムのセキュリティ上のリスクがあります。ここでの解決策は、マルチステージ ビルドです。
マルチステージ ビルドでは、複数のコンテナーが 1 つのファイルで定義され、必要なデータのみが 1 つのコンテナーから別のコンテナーに送信されます。
マルチステージ Dockerfile の例
Node.js にとどまるために、マルチステージ ビルドの例を次に示します。最初のコンテナーにはビルド システムとして Node.js が含まれており、その中に Web サイトが作成されます。 2 番目のコンテナーには、ビルド後に最初のコンテナーから必要なデータをコピーする Web サーバーが含まれています。
## Base System Stage 1
## Use community Node.js container
FROM node:8.11.3 as buildsystem
## Add source from our Git project
COPY ./source /root/frontend
## Build frontend with Nodejs
WORKDIR /root/frontend/
RUN npm install \
&& npm run build
#####################################################################
#####################################################################
## Base System Stage 2
## Use community nginx container
FROM nginx:alpine
## Copy build from stage 1
RUN mkdir -p /var/www/html/<MyApp>
COPY --from=buildsystem /root/frontend/dist/ /var/www/html/<MyApp>/
## Add default config for nginx
ADD default.conf /etc/nginx/conf.d/
## Publish Port
EXPOSE 80
## Start nginx
CMD ["nginx", "-g", "daemon off;"]
その結果、最も必要なものだけが入った小さなコンテナができあがります。 nginx と alpine には非常に小さな Linux ディストリビューションを使用しています。
もう 1 つの利点は、2 つの既製のコミュニティ コンテナーにアクセスできるため、それらを作成して維持する手間がかからないことです。システム アップデートの場合、コミュニティ コンテナは単純に定期的に置き換えられます。 GitLab (またはその他のツール) を使用すると、パイプラインですべてを驚くほど自動化できます。
産業技術
- ビジネスリーダーとの信頼を築くためにクラウドサービスを賢く選択する
- 科学的記数法による算術
- インダストリー4.0ソリューションアーキテクトとのQ&A
- Raspberry Pi、DHT11センサー、Thingspeakを使用して最初のIOTを構築します。
- Microsoftは、170億のパラメータを使用して最大の言語生成モデルを構築します
- サプライチェーン企業がAIを使用してロードマップを構築する方法
- スマート調達はAIとHIのバランスをとる
- コンテナクレーン
- x86 上のアーム用のコンテナー ビルド
- コンテナーを使用したマルチステージ ビルド
- Docker のヒントとベスト プラクティスを含む Node-Red