Dockerでマルチステージビルドを使用して、より小さく、より安全な画像を作成するにはどうすればよいですか?
Dockerのマルチステージビルドは、DockerFileのFROM
から複数の使用を使用できる機能です。 FROM
からそれぞれがビルドプロセスの新しい段階を開始でき、ある段階から別の段階にアーティファクトをコピーできます。この方法は、ビルド環境をランタイム環境から分離することにより、より小さく、より安全なDocker画像の作成に特に役立ちます。
これを達成するためにマルチステージビルドを使用する方法は次のとおりです。
-
ビルドステージの定義:アプリケーションをコンパイルするか、アーティファクトを準備するビルドステージを定義することから始めます。たとえば、
golang
画像を使用してGOアプリケーションをコンパイルする場合があります。<code class="Dockerfile">FROM golang:1.16 as builder WORKDIR /app COPY . . RUN go build -o myapp</code>
-
ランタイムステージの定義:ビルドステージの後、ベースイメージを最小限に抑えたランタイムステージを定義します。ビルドステージから必要なアーティファクトのみをこのランタイムステージにコピーします。
<code class="Dockerfile">FROM alpine:3.14 COPY --from=builder /app/myapp /myapp CMD ["/myapp"]</code>
マルチステージビルドを使用することにより、アプリケーションを実行するために必要なもののみを含む最終画像になります。
マルチステージDockerビルドでコードを整理するためのベストプラクティスは何ですか?
マルチステージDockerビルドでコードを効果的に整理することで、DockerFileの効率と明確さを大幅に向上させることができます。ここにいくつかのベストプラクティスがあります:
-
個別の懸念:さまざまな目的(建物、テスト、展開など)でさまざまなステージを使用します。この懸念の分離により、DockerFileは理解し、維持しやすくなります。
<code class="Dockerfile"># Build stage FROM node:14 as builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # Test stage FROM node:14 as tester WORKDIR /app COPY --from=builder /app . RUN npm run test # Runtime stage FROM node:14-alpine WORKDIR /app COPY --from=builder /app/build /app/build CMD ["node", "app/build/index.js"]</code>
-
レイヤー数を最小化します。可能な場合は実行コマンドを結合して、画像のレイヤー数を減らします。このプラクティスは、ビルドプロセスをスピードアップするだけでなく、結果の画像を小さくします。
<code class="Dockerfile">RUN apt-get update && \ apt-get install -y some-package && \ rm -rf /var/lib/apt/lists/*</code>
-
.dockerignore
:.dockerignore
ファイルを作成して、不要なファイルをDockerビルドコンテキストにコピーするのを除外します。これにより、ビルドプロセスが高速化され、画像サイズが削減されます。 -
コピー操作の最適化:各段階に必要なファイルのみをコピーします。たとえば、node.jsアプリケーションのビルド段階では、最初に
package.json
をコピーし、npm install
を実行してから、アプリケーションの残りの部分をコピーできます。 - 名前付きステージを使用してください:dockerfileの読みやメンテナンスを容易にするために、ステージに意味のある名前を付けます。
ビルド時間を改善するために、マルチステージDockerビルドのキャッシュを最適化するにはどうすればよいですか?
マルチステージDockerビルドでキャッシュを最適化すると、ビルド時間を大幅に短縮できます。これを達成するためのいくつかの戦略があります:
-
操作の順序:dockerfileの端に向かってコマンドを頻繁に変更します。 Dockerは、dockerfileの最初からレイヤーをキャッシュし、後続のビルドを高速化します。
<code class="Dockerfile">FROM node:14 as builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build</code>
この例では、
npm install
アプリケーションコードよりも変更される可能性が低いため、COPY . .
指示。 - マルチステージビルドを使用してください。各ステージは独立してキャッシュできます。これは、各ステージのビルドキャッシュを活用して、後続のビルドで時間を節約できる可能性があることを意味します。
-
レバレッジビルドキット:Docker BuildKitは、改善されたビルドキャッシュメカニズムを提供します。環境変数を設定してbuildkitを有効にします
DOCKER_BUILDKIT=1
設定し、新しいRUN --mount
コマンドをキャッシュディレクトリにマウントするには使用します。<code class="Dockerfile"># syntax=docker/dockerfile:experimental FROM golang:1.16 as builder RUN --mount=type=cache,target=/root/.cache/go-build \ go build -o myapp</code>
- Dockerビルドコンテキストを最小化します。.Dockerignoreファイル
.dockerignore
使用して、ビルドコンテキストから不要なファイルを除外します。コンテキストが小さいとは、転送するデータが少なくなり、ビルドが速くなります。 - 特定のベース画像を使用します。軽量で安定したベース画像を使用して、ビルド中にベースレイヤーを引くのにかかる時間を短縮します。
単一段階のビルドと比較して、マルチステージDockerビルドが提供するセキュリティ利点は何ですか?
マルチステージのDockerビルドは、単一ステージビルドと比較していくつかのセキュリティ特典を提供します。
- 画像サイズが小さい:ビルドステージからランタイムステージまで必要なアーティファクトのみをコピーすることにより、マルチステージビルドにより、最終画像がはるかに小さくなります。脆弱なコンポーネントが少ないため、小さい画像には攻撃面が縮小されています。
- 脆弱性の低下:最終画像には、ビルドプロセス中にのみ必要なビルドツールまたは依存関係が含まれていないため、攻撃者がこれらのツールの脆弱性を活用する機会は少なくなります。
- ビルドおよびランタイム環境の分離:マルチステージビルドを使用すると、アプリケーションの構築と実行に異なるベース画像を使用できます。ビルド環境はより寛容であり、コンパイルまたはパッケージングに必要なツールを含めることができますが、ランタイム環境はより制限され、セキュリティのために最適化できます。
- コンプライアンスの容易:より小さく、より焦点を絞った画像は、脆弱性をスキャンし、セキュリティポリシーのコンプライアンスを確保し、安全な環境を維持しやすくなります。
- 秘密の露出の制限:機密データ(ビルド中に使用されるAPIキーなど)を最終画像に含める必要はないため、マルチステージビルドは、ランタイム環境で秘密が公開されるのを防ぐのに役立ちます。
マルチステージビルドを活用することにより、Docker画像のセキュリティ姿勢を大幅に強化しながら、サイズとパフォーマンスを最適化できます。
以上がDockerでマルチステージビルドを使用して、より小さく、より安全な画像を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Docker Containerの起動手順:コンテナ画像を引く:「Docker Pull [Mirror Name]」を実行します。コンテナの作成:「docker create [options] [mirror name] [コマンドとパラメーター]」を使用します。コンテナを起動します:「docker start [container name or id]」を実行します。コンテナのステータスを確認してください:コンテナが「Docker PS」で実行されていることを確認します。

Dockerログを表示する方法は次のとおりです。たとえば、Docker Logsコマンドを使用します。たとえば、Docker logs container_name docker execコマンドを使用して /bin /shを実行し、logファイルを表示します。 cat /var/log/container_name.log docker-compose -f docker-comのDocker ComposeのDocker-Composeログを使用します。

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

Dockerでコンテナを作成します。1。画像を引く:Docker Pull [ミラー名]2。コンテナを作成:Docker Run [Options] [Mirror Name] [コマンド]3。コンテナを起動:Docker Start [Container Name]

Dockerコンテナを終了する4つの方法:コンテナ端子でCtrl Dを使用するコンテナターミナルに出口コマンドを入力しますDocker stop&lt; container_name&gt;コマンドを使用するDocker Kill&lt; container_name&gt;ホストターミナルのコマンド(フォース出口)

Dockerの外部ホストにファイルをコピーする方法:Docker CPコマンドを使用:Docker CP [Options]&lt; Container Path&gt; &lt;ホストパス&gt;。データボリュームの使用:ホストにディレクトリを作成し、-vパラメーターを使用してコンテナを作成するときにディレクトリをコンテナにマウントして、双方向ファイルの同期を実現します。

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

Dockerコンテナを再起動する方法:コンテナID(Docker PS)を取得します。コンテナを停止します(docker stop&lt; container_id&gt;);コンテナを起動します(docker start&lt; container_id&gt;);再起動が成功していることを確認します(Docker PS)。その他の方法:Docker Compose(Docker-Compose Restart)またはDocker API(Dockerドキュメントを参照)。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
