目次
I.はじめに
開発者にとって、Docker は知っていても Dockerfile を知らないということは、Docker を知らないことを意味します。前回の記事では、Docker の基本的な使用法を学習しました:「この記事で Docker を学習できます」。今日は、Dockerfile を学習して、すぐに開始でき、効率的な Docker イメージを作成できます。
2. Dockerfileを理解する
Dockerfile は、Docker イメージのビルド プロセスを定義するテキスト ファイルです。ミラーを構築する方法を手順の形式で説明し、基本ミラーから構成、ファイル、依存関係を徐々に追加し、最終的に必要なミラーを形成します。イメージ構築プロセスを定義するための簡単で反復可能な方法を提供します。
3. Dockerfile の説明
- FROM 命令: FROM 命令は Dockerfile の最初の命令であり、ベース イメージを指定するために使用されます。適切なベースイメージを選択することは、イメージのサイズとパフォーマンスに直接影響するため、非常に重要です。複数段階のビルドを利用してイメージ サイズを削減することもできます。
- RUN コマンド: RUN コマンドは、イメージの構築中にコマンドを実行するために使用されます。RUN を使用すると、パッケージをインストールし、スクリプトを実行し、環境を構成できます。
- COPY および ADD コマンド: これら 2 つのコマンドは、ローカル ファイルをイメージにコピーするために使用されます。違いは、ADD 命令は自動解凍とリモート URL をサポートしますが、COPY 命令の方がより具体的で予測可能なため推奨されることです。
- CMD ディレクティブと ENTRYPOINT ディレクティブ: これら 2 つのディレクティブは、コンテナーの起動時に実行されるコマンドを定義するために使用されます。CMD で定義されたコマンドは docker run コマンド ライン パラメーターでオーバーライドできますが、ENTRYPOINT で定義されたコマンドは常に実行されます。
単純な Dockerfile の例を次に示します。
# 使用 openjdk 镜像作为基础镜像
FROM openjdk:latest
# 设置工作目录
WORKDIR /app
# 复制 Java 项目的 JAR 文件到镜像中
COPY target/myapp.jar /app/
# 定义容器启动时执行的命令
CMD ["java", "-jar", "myapp.jar"]
上の例では、openjdk:latest をベース イメージとして使用し、Java プロジェクトの JAR ファイルをイメージにコピーしました。次に、コンテナーの起動時に実行されるコマンドが CMD コマンドによって定義されます。つまり、java -jar myapp.jar を実行して Java アプリケーションを起動します。
4、多段構造
マルチステージ ビルドは、特に Java プロジェクトなどのコンパイル済み言語アプリケーションをビルドする場合に、Docker イメージのサイズを最適化するための手法です。マルチステージ ビルドでは、Dockerfile で複数の FROM 命令を定義でき、各命令がビルド ステージを表します。最終イメージには最後の FROM 命令で定義されたステージのみが保持され、他の中間生成物は最終イメージに含まれないため、イメージのサイズが削減されます。
Dockerfile の例:
# 第一阶段:构建 Java 项目
FROM maven:latest AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src/ /app/src/
RUN mvn package
# 第二阶段:运行 Java 项目
FROM openjdk:latest
WORKDIR /app
COPY --from=builder /app/target/myapp.jar /app/
CMD ["java", "-jar", "myapp.jar"]
上の例では、2 つの FROM ディレクティブを使用しました。
Maven から:最新の AS ビルダーは、依存関係のインストールとプロジェクトの構築に Maven イメージを使用して、最初の段階で Java プロジェクトをビルドすることを意味します。
FROM openjdk: latest は、OpenJDK イメージを使用して Java プロジェクトを実行する第 2 段階を示します。COPY --from ディレクティブを使用すると、ビルドされた JAR ファイルが第 1 段階のイメージから第 2 段階のイメージにコピーされ、それによって最終イメージのサイズが削減されます。
5. Dockerfile の高度な使用法
- ARG と ENV の使用: ARG ディレクティブはビルド プロセス中に引数を渡すために使用され、ENV ディレクティブは環境変数を設定するために使用されます。これらの命令を使用すると、イメージ構築プロセスをより柔軟にカスタマイズできます。
- WORKDIR の使用: WORKDIR ディレクティブは、コンテナ内でコマンドを実行するためのデフォルトのディレクトリである作業ディレクトリを設定するために使用されます。これにより、Dockerfile の読み取りと保守が容易になります。
- VOLUME を使用する: VOLUME コマンドは、コンテナー内にマウント ポイントを作成するために使用され、コンテナー内のデータをホスト上に保持できるようにします。
Dockerfile の例:
# 第一阶段:构建 Java 项目
FROM maven:latest AS builder
# 使用 ARG 指令传递构建参数
ARG APP_VERSION=1.0.0
ARG BUILD_ENV=production
# 设置工作目录
WORKDIR /app
# 复制 pom.xml 并安装项目依赖
COPY pom.xml .
RUN mvn dependency:go-offline
# 复制源代码并构建项目
COPY src/ /app/src/
RUN mvn package -DskipTests
# 第二阶段:运行 Java 项目
FROM openjdk:latest
# 使用 ENV 指令设置环境变量
ENV APP_PORT=8080
ENV BUILD_ENV=${BUILD_ENV}
# 使用 VOLUME 指令创建挂载点
VOLUME /app/logs
# 设置工作目录
WORKDIR /app
# 复制构建好的 JAR 文件到镜像中
COPY --from=builder /app/target/myapp-${APP_VERSION}.jar /app/
# 定义容器启动时执行的命令
CMD ["java", "-jar", "myapp-${APP_VERSION}.jar", "--port=${APP_PORT}", "--env=${BUILD_ENV}"]
上記の例では、まず ARG ディレクティブを使用してビルド パラメーター APP_VERSION および BUILD_ENV を定義し、FROM maven:latest AS ビルダー フェーズで ARG ディレクティブを使用してビルド パラメーターを渡します。
このようにして、ビルド時に --build-arg パラメーターを介して特定の値を渡すことができます。次に例を示します。
cssCopy code
docker build --build-arg APP_VERSION=2.0.0 --build-arg BUILD_ENV=staging -t my-java-app .
このようにして、異なるバージョンおよび異なる環境のイメージを構築できます。
同時に、VOLUME コマンドを使用してマウント ポイント /app/logs を作成し、コンテナー内のログ ファイルをホスト上に永続的に保存できるようにします。
6. Docker によってデプロイされたローコード
JNPF 高速開発プラットフォームは、SpringBoot+Vue3 をベースとしたフルスタック開発プラットフォームで、マイクロサービス、フロントエンドとバックエンドの分離アーキテクチャのニーズを満たし、ビジュアル プロセス モデリング、フォーム モデリングに基づいてビジネス アプリケーションを迅速に構築します。 、レポート モデリング ツール。このプラットフォームはローカルに展開でき、K8S 展開もサポートします。無料トライアルのアドレス: https://www.jnpfsoft.com/?csdn
上記の機能に加え、ページUIのビジュアル構築を基本的に実現するチャートエンジン、インターフェースエンジン、ポータルエンジン、組織ユーザーエンジンなどのビジュアル機能エンジンも搭載しています。数百の機能コントロールとテンプレートが組み込まれているため、ドラッグ アンド ドロップの簡単な操作でユーザーのパーソナライズされたニーズに最大限に応えることができます。
視覚的なドラッグ アンド ドロップ方式により、JNPF を使用した従来のモードでアプリケーションの開発を完了するのにわずか 2 時間しかかかりません。JNPF を使用してアプリケーションを構築するには、ビジネス自体、データ ストレージ、オペレーティング環境、サーバー、ネットワーク セキュリティなどに注意を払うだけでよく、プラットフォームがすべてを処理します。
7. まとめ
Dockerfile は、Docker イメージを構築するためのコア ツールであり、イメージ構築プロセスをシンプル、再現可能、効率的にします。この記事の導入を通じて、Dockerfile の基本的な構文と一般的な手順、およびいくつかのベスト プラクティスを学習しました。実践と徹底的な学習により、より優れた Docker イメージを作成し、ソフトウェア開発とデプロイメントに Docker をより適切に適用できるようになると思います。