最近、同社のアプリケーションは数十個のアプリケーションをテストしてリリースするのは面倒であり、環境要因により展開時にさまざまな問題が発生するため、コンテナ化の準備を進めている。開発、テスト、本番環境で一貫した環境を維持するために、コンテナ技術が導入されました。まずはエッジプロジェクトで試して経験を積みました。今日は、一般的なSpring Boot Dockerパッケージングツールをいくつか簡単にまとめました。 スプリングブートDockerSpring Boot アプリケーションでは、異なる環境を定義するために異なる識別子を合意することができます。たとえば、dev は開発環境を表し、test はテスト環境を表します。対応する構成ファイルは、apppcation-dev.yaml と apppcation-test.yaml です。 spring.profiles.active を宣言して、対応する環境構成をアクティブ化します。たとえば、dev 環境をアクティブ化する場合は、spring.profiles.active=dev とします。完全な起動コマンドは次のとおりです。 java -Djava.security.egd=ファイル:/dev/./urandom -Dspring.profiles.active=dev -jar spring-boot-app.jar 上記のコマンドに従って、複数の環境に適応できる Dockerfile を作成します。 # adoptopenjdk/openjdk8 から openjdk イメージをインポートします #著者を宣言する LABEL AUTHOR=felord OG=felord.cn # ログなどのいくつかの便利なフォルダをマウントします VOLUME ["/tmp","/logs"] #デフォルトの開発構成ファイルを動的に有効にするための環境パラメータを宣言します 環境アクティブ=dev # ポートを公開 EXPOSE 8080 # アプリケーションをパッケージ化した後、jar ファイルをコピーして名前を変更します ADD /target/flyway-spring-boot-1.0.0.jar app.jar # コンテナの起動時に最初に実行されるコマンドは、アプリケーションを起動するために使用されます ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=${ACTIVE}","-jar","app.jar"] パッケージ化された Docker イメージは、docker run に --env ACTIVE=test を追加することで、環境を動的に変更できます。単純に Dockerfile を書くだけでは、DevOps には不便です。 Dockerイメージのライフサイクル 自動的にビルドし、リポジトリにプッシュし、イメージをプルし、一連のパイプライン操作を実行できる必要があります。幸いなことに、このプロセスを実現するのに役立つツールが市場には数多くあります。 spring-boot-maven-プラグインこれは、特定のバージョン 2.x で Docker イメージ構築機能を提供する公式の Spring Boot プラグインです。 <プロジェクト> <ビルド> <プラグイン> <プラグイン> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <構成> <画像> <名前>docker.repo.com/library/${project.artifactId}:${project.version}</名前> <publish> 真</publish> </画像> <ドッカー> <レジストリを公開> <ユーザー名>ユーザー</ユーザー名> <password>秘密</password> <url>https://docker.repo.com/v1/</url> <メール>[email protected]</メール> </レジストリを公開> </ドッカー> </構成> </プラグイン> </プラグイン> </ビルド> </プロジェクト> Docker プライベート ウェアハウスを構成した後、mvn clean spring-boot:build-image を使用してイメージをビルドできます。 この方法の利点は、追加の依存関係がないことです。欠点は、ビルドコンポーネントを GitHub からダウンロードする必要があり、ネットワークが良好でないと失敗しやすいことです。 Spotify Maven プラグインSpotify Maven プラグインは現在人気のある選択肢です。アプリケーション開発者は Dockerfile を記述し、それをプロジェクトの src/main/docker ディレクトリに配置する必要があります。その後、次の方法でインポートできます。 <プラグイン> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <バージョン>1.4.8</バージョン> <構成> <リポジトリ>repo.com/${project.artifactId}</リポジトリ> </構成> </プラグイン> このプラグインは、ビルド、タグ付け、リモートプライベートリポジトリへの公開にそれぞれ使用される、mvn dockerfile:build、mvn dockerfile:tag、mvn dockerfile:push の 3 つのコマンドを提供します。非常にシンプルです。 これは非常に使いやすいプラグインです。唯一の要件は、Dockerfile を記述できることです。カスタマイズの要件が高い場合に使用できます。 Jib Maven プラグインこれについては以前の記事ですでに紹介しているので、詳しく知ることができます。これは、Docker イメージをパッケージ化するために使用できる、Google のオープンソース OCI イメージ パッケージ化ツールであり、ほとんどの場合のニーズを満たします。しかし、カスタマイズしたい場合は、まだ簡単ではないため、公式ドキュメントを読む必要があります。 JIb を使用する場合、最初の Dockerfile は次のように構成する必要があります。 <プラグイン> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <バージョン>3.0.0</バージョン> <構成> <から> <画像>openjdk/openjdk8 を採用</画像> </from> <に> <画像>docker.repo.com/library/${project.artifactId}</画像> <認証> <username>フェロード</username> <パスワード>xxxxxx</パスワード> </auth> <タグ> <タグ>${プロジェクト.バージョン}</タグ> </タグ> </に> <追加ディレクトリ> <パス> <パス> <from>target/${project.artifactId}-${project.version}.jar</from> <includes>*.jar</includes> <into>/app.jar</into> </パス> </パス> </extraDirectories> <containerizingMode>パッケージ化</containerizingMode> <コンテナ> <ボリューム>/tmp、/logs</ボリューム> <ポート> <ポート>8080</ポート> </ポート> <環境> <active>開発</active> </環境> <エントリポイント> java、-Djava.security.egd=ファイル:/dev/./urandom、-Dspring.profiles.active=${active}、-jar、/app.jar </エントリポイント> <creationTime>USE_CURRENT_TIMESTAMP</creationTime> </コンテナ> </構成> </プラグイン> ローカルの Docker 環境が不要で、階層化構築やイメージスリム化に対応しているため導入しやすいのがメリットですが、カスタマイズが難しいのがデメリットです。 Spring Boot 用のどの Docker パッケージング プラグインが優れているかについての記事はこれで終わりです。より関連性の高い Spring Boot Docker パッケージング プラグインのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 小さな画像をクリックしたときに更新せずに大きな画像コードが表示されるようにLightboxを実現するためにCSSを使用する
ここ2日間ちょっと忙しくて、公式アカウントも数日更新が止まってしまいました。その結果、何人かの読者か...
システムの問題、アプリケーションの速度低下、または原因不明の問題をトラブルシューティングする場合、最...
MySQL 5.7.9 バージョンの sql_mode=only_full_group_by の問題...
よく使用されるコマンドは次のとおりです。 chmod 777 文件或目錄例: chmod 777 /...
データのバックアップと復元パート2は次のとおりです基本的な概念:バックアップ、現在のデータまたはレコ...
どの企業もユーザーベースを拡大したいのであれば、ユーザーの操作データを収集・分析する必要があり、その...
目次TOKEN タイマーリフレッシュ2. access_tokenの内部設計2.1 access_t...
目次プロジェクトにおける一般的な支払い方法Alipay決済微信ペイプロジェクトにおける一般的な支払い...
ソフトウェアのインストールをカスタマイズする場合、多くの場合、環境変数を設定する必要があります。以下...
序文プロジェクトを開発しているときに、かなり厄介な問題に遭遇しました。この製品では、判断のためにブラ...
<br />前回のCSSに関する記事は、多くの人にあまり理解されませんでした。そのため、...
1.dockerをオンラインでダウンロードする yum インストール -y epel-release...
Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....
目次1. 3.0をより適切にサポートするには、vue/cliのバージョンが4.5.0以上であることを...
この記事の目的は、最も明確な構造を使用していくつかのコンポーネントの基本機能を実装することです。皆さ...