Docker 経由で Spring Boot アプリケーションを公開およびデプロイするプロセスの分析

Docker 経由で Spring Boot アプリケーションを公開およびデプロイするプロセスの分析

Spring BootプロジェクトをDockerにデプロイする方法は、手動デプロイとプラグインデプロイの2つがあります。

手動展開

1.アイデアを使ってSpring Bootプロジェクトを作成する

pom.xml ファイル

<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<プロジェクト xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <親>
        <artifactId>spring-cloud-examples</artifactId>
        <グループID>org.example</グループID>
        <バージョン>1.0-SNAPSHOT</バージョン>
    </親>
    <モデルバージョン>4.0.0</モデルバージョン>

    <artifactId>Dockerデモ</artifactId>

    <依存関係>
        <依存関係>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </依存関係>
    </依存関係>

    <ビルド>
        <プラグイン>
            <プラグイン>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </プラグイン>
        </プラグイン>
    </ビルド>

</プロジェクト>

spring-boot-maven-pluginプラグインを追加する必要があります。このプラグインの機能は、Jar パッケージをパッケージ化するときに依存パッケージを導入することです。パッケージ化のために「mvn package」を実行すると、直接実行できる JAR ファイルにパッケージ化されます。「java -jar」コマンドを使用して直接実行できます。

スタートアップクラス

パッケージ dockerdemo;

org.springframework.boot.SpringApplication をインポートします。
org.springframework.boot.autoconfigure.SpringBootApplication をインポートします。
org.springframework.web.bind.annotation.RequestMapping をインポートします。
org.springframework.web.bind.annotation.RestController をインポートします。

@レストコントローラ
@SpringBootアプリケーション
パブリッククラスアプリケーション{
    パブリック静的voidメイン(String[] args) {
        SpringApplication.run(Application.class、引数);
    }

    @RequestMapping("/hello")
    パブリック文字列hello(){
        「Hello Docker World!」を返します。
    }
}

2. プロジェクトをJarにパッケージ化する

次に、プロジェクトの pom.xml ファイルがあるディレクトリで Maven コマンドを実行し、プロジェクトを Jar パッケージにパッケージ化します。

$ mvn パッケージ

出力ログから、Jar がターゲット ディレクトリにあることがわかります。Jar パッケージを直接実行します。

$ java -jar DockerDemo-1.0-SNAPSHOT.jar

次にブラウザにhttp://localhost:8080/helloと入力してテストします。

ここに画像の説明を挿入

3. Dockerイメージをビルドする

Dockerfileを作成する

java:8より
ボリューム /tmp
DockerDemo-1.0-SNAPSHOT.jar DockerDemo.jar を追加します。
bash -c "touch /DockerDemo.jar" を実行します。
エントリポイント ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/DockerDemo.jar"]

パラメータの説明:

  • FROM: DockerイメージがJDK8に基づいて作成されていることを示します
  • VOLUME: はマウント ポイントの作成を意味し、コンテナー ディレクトリは /tmp になり、ホスト ディレクトリは自動的に生成されます。 Spring Boot に組み込まれた Tomcat コンテナはデフォルトで /tmp を作業ディレクトリとして使用するため、/tmp が作成されます。
  • 追加: コンテナ外の DockerDemo-1.0-SNAPSHOT.jar をコンテナにコピーし、名前を DockerDemo.jar に変更します。
  • RUN: RUN の後に bash コマンドが続き、-c はその後の文字列がコマンドとして実行されることを意味します。つまり、touch /DockerDemo.jar が実行されます。このコマンドは、DockerDemo.jar ファイルのアクセス時刻と変更時刻を現在の時刻に変更します。
  • ENTRYPOINT: コンテナの起動時に実行されるコマンド。コマンドラインで java -jar xxxx.jar と入力するのと同じです。Tomcat の起動時間を短縮するには、java.security.egd のシステム プロパティを追加して、ENTRYPOINT として /dev/urandom を指定します。

Dockerfile を作成したら、パッケージ化された Spring Boot プロジェクトの jar パッケージと Dockerfile ファイルを任意のディレクトリに配置し、docker コマンドを使用してイメージ ファイルをビルドします。

$ docker イメージをビルド -t DockerDemo:1 。

パラメータの説明:

  • 構築: 鏡を作ることを意味する
  • -t: イメージにラベルを付けることを意味します。これは docker tag イメージ ID と同等です。新しいイメージ名: バージョン番号
  • .: はDockerfileファイルの場所を示し、. は現在のディレクトリを示します。

4. イメージを表示して実行する

#画像を表示:
$ docker イメージ
#イメージを実行します:
$ docker コンテナ実行 --name DockerDemo -d -p 80:8080 DockerDemo:1

パラメータの説明:

  • docker container run: コンテナを実行することを意味します
  • –name: コンテナに別名を付けます。コンテナを操作するときに、コンテナIDの代わりに別名を使用すると、コンテナの管理が容易になります。
  • -d: コンテナが起動後にバックグラウンドで実行されることを示します
  • -p: ポートマッピング。コンテナ内のポート8080をホストのポート80にマッピングする

ここに画像の説明を挿入

プラグインの展開

プラグインをデプロイするには、プロジェクトの pom.xml ファイルにdockerfile-maven-pluginプラグインを追加します。

ドキュメント

<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<プロジェクト xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <親>
        <artifactId>spring-cloud-docker</artifactId>
        <グループID>org.example</グループID>
        <バージョン>1.0-SNAPSHOT</バージョン>
    </親>
    <モデルバージョン>4.0.0</モデルバージョン>

    <artifactId>スプリングクラウドユーレカ</artifactId>

    <プロパティ>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- イメージプレフィックス。リモートライブラリにイメージをプッシュするときに必要です。ここでは、Alibaba Cloud プライベートライブラリが構成されています。 -->
        <docker.image.prefix>
            レジストリ.cn-huhehaote.aliyuncs.com/monkeybrain
        </docker.image.prefix>
        <!-- docker イメージタグ -->
        <docker.tag>最新</docker.tag>

        <!-- アクティブ化されたプロフィール -->
        <!--<アクティブ化されたプロパティ></アクティブ化されたプロパティ>-->
    </プロパティ>

    <依存関係>
        <依存関係>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </依存関係>
    </依存関係>

    <プロフィール>
        <!-- Docker 環境 -->
        <!--<プロフィール>
            <id>ドッカー</id>

            <プロパティ>
                <activatedProperties>ドッカー</activatedProperties>
                <docker.tag>docker-demo-${プロジェクトバージョン}</docker.tag>
            </プロパティ>
        </プロフィール>-->
    </プロフィール>

    <ビルド>
        <!--デフォルトの Maven コマンド-->
        <defaultGoal>インストール</defaultGoal>
        <finalName>${プロジェクト.アーティファクトId}</finalName>

        <リソース>
            <リソース>
                <ディレクトリ>src/main/resources</ディレクトリ>
                <フィルタリング>真</フィルタリング>
            </リソース>
        </リソース>


        <プラグイン>
            <!-- Spring Boot Maven プラグインを設定して、プロジェクトを実行可能な jar パッケージにパッケージ化します -->
            <プラグイン>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <構成>
                    <実行可能ファイル> 真</実行可能ファイル>
                </構成>
            </プラグイン>

            <!-- パッケージ化時にユニットテストをスキップ -->
            <プラグイン>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <構成>
                    <skipTests> 真</skipTests>
                </構成>
            </プラグイン>

            <!-- docker maven プラグインを設定し、インストール ライフサイクルをバインドし、maven install の実行時に docker イメージを生成します -->
            <プラグイン>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <バージョン>0.4.13</バージョン>
                <!--<実行>
                    <実行>
                        <phase>インストール</phase>
                        <目標>
                            <goal>ビルド</goal>
                            <goal>タグ</goal>
                        </目標>
                    </実行>
                </実行>-->
                <構成>
                    <!-- ここで docker ノードの IP を変更するには、docker ノードのリモート管理ポート 2375 を開く必要があります。
                    具体的な設定については、Dockerのインストールと設定に関する前回の記事を参照してください-->
                    <dockerHost>http://localhost:2375</dockerHost>
                    <イメージ名>${docker.image.prefix}/${project.build.finalName}</イメージ名>
                    <serverId>aliyun-docker-registry</serverId>
                    <registryUrl>registry.cn-huhehaote.aliyuncs.com</registryUrl>
                    <pushImage>真</pushImage>
                    <!--ミラータグ-->
                    <画像タグ>
                        <imageTag>最新</imageTag>
                    </画像タグ>
                    <!--ベースイメージ-->
                    <baseImage>java:8</baseImage>
                    <!-- ここでの entryPoint は、コンテナの起動時に実行するコマンドを定義します。コンテナが起動すると、java -jar パッケージ名が実行されます-->
                    <エントリポイント>
                        ["java","-jar","/${project.build.finalName}.jar"]
                    </エントリポイント>
                    <リソース>
                        <リソース>
                            <ターゲットパス>/</ターゲットパス>
                            <ディレクトリ>${project.build.directory}</ディレクトリ>
                            <include>${project.build.finalName}.jar</include>
                        </リソース>
                    </リソース>

                    <!--<イメージ>${docker.image.prefix}/${project.build.finalName}</イメージ>
                    <新しい名前>${docker.image.prefix}/${project.build.finalName}:${docker.tag}</新しい名前>
                    <forceTags>true</forceTags>-->
                    <!-- イメージを生成するときにリモート ライブラリにプッシュする必要がある場合は、pushImage を true に設定します -->
                    <!--<pushImage>偽</pushImage>-->
                </構成>
            </プラグイン>
        </プラグイン>
    </ビルド>


</プロジェクト>

プッシュコマンドを実行する

$ mvn clean package docker:build -DpushImage

これで、Docker による Spring Boot アプリケーションのリリースとデプロイのプロセス分析に関するこの記事は終了です。Spring Boot アプリケーションの Docker デプロイに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker Compose は MySQL に接続するために SpringBoot プロジェクトをデプロイしますが、そこで遭遇する落とし穴があります。
  • Springboot の複数のデータ ソースが Docker と連携して、mysql マスター スレーブを展開し、読み取りと書き込みの分離効果を実現します。
  • Springboot および Vue プロジェクトの Docker デプロイメントの実装手順
  • SpringbootサービスDockerの自動デプロイを実装する方法
  • Springboot パッケージングを Docker イメージとして実装し、デプロイする

<<:  ウェブデザインのための6つのヒント

>>:  MySQL トランザクション分離はどのように実現されますか?

推薦する

Linuxでスクリーンショットを撮って編集するための最高のツール

メインのオペレーティング システムを Windows から Ubuntu に切り替えたとき、最初に考...

VirtualBox を使用して Mac 上にローカル仮想マシン環境を構築する方法

1. ビッグデータとHadoopビッグデータについて研究し学ぶには、当然 Hadoop から始める必...

JavaScript のドキュメント オブジェクト モデル (DOM)

目次1. DOMとは何か2. 要素を選択する3. getElementById() 4. クエリセレ...

Docker デプロイメント Springboot プロジェクト例の分析

この記事は主に、docker デプロイメント springboot プロジェクトのサンプル分析を紹介...

mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...

CSSアニメーションがJSによってブロックされるかどうかについての簡単な議論

CSS のアニメーション部分は JS によってブロックされますが、transform のアニメーショ...

CSSで記事の区切り線のスタイルを実装するさまざまな方法のまとめ

この記事では、CSS で記事の区切り線を実装するさまざまな方法をまとめています。区切り線はページを美...

MySQL Binlog ログ処理ツールの比較分析

目次運河マクスウェルデータバスAlibaba Cloud のデータ転送サービス (DTS)運河ポジシ...

MySQL 8.0.20 Window10無料インストール版設定とNavicat管理チュートリアルグラフィック詳細説明

1. MySQL 8.0.20をダウンロードして解凍するダウンロードリンク: https://dev...

CenterOS7 インストールおよび構成環境 jdk1.8 チュートリアル

1. まずcenterosに付属のJDKをアンインストールします rpm-qa|grepopenjd...

CSS スタイルで一般的なグラフィック効果を示すサンプルコード

一般的な基本グラフィックと私が遭遇するいくつかの小さなアイコンについて簡単に説明します。以下は CS...

Centos サーバーで nginx を設定する方法の例

セキュアターミナルMobaXterm_Personalをダウンロードまず、安全なターミナルをダウンロ...

JavaScript 高度なカスタム例外

目次1. コンセプト1.1 エラーと例外とは何ですか? 1.2 異常の分類2. 例外処理2.1try...

IdeaでTomcatを起動したときに複数のリスナーが報告される問題を解決する

エラーのスクリーンショット例外が発生した場所が見つかりません。解決策: リソースディレクトリにlog...

太字の <b> と <strong> の違いの分析

私たちウェブマスターは皆、ウェブサイトを最適化する際に記事内のキーワードを太字にすることが最適化に非...