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 トランザクション分離はどのように実現されますか?

推薦する

ショッピングカートのスライド削除効果を実装するReactネイティブサンプルコード

基本的にすべてのeコマースプロジェクトにはショッピングカートの機能があります。これはreact-na...

Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました

MySQLへの接続ここでは、リモート接続に navicat を使用します。MySQL に接続する前に...

Vueは単一ファイルコンポーネントの完全なプロセス記録を実装します

目次序文単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...

MACOS で MySQL ルートパスワードを忘れた場合の解決策

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

Ubuntu 18.04 に Anaconda3 をインストールするための詳細なチュートリアル

Anaconda は、conda、Python、およびそれらの依存関係など、180 を超える科学パッ...

MySQL の一般的なツール例の概要 (推奨)

序文この記事では主にMySQLでよく使われるツールに関する関連コンテンツを紹介し、皆さんの参考と学習...

進捗バー効果を実現するJavaScript

この記事では、プログレスバー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Linux でコマンドまたはプロセスの実行時間を調べる方法

Unix ライクなシステムでは、コマンドまたはプロセスの実行がいつ開始されたか、またプロセスがどのく...

MySQLクエリプランでken_lenの値を計算する方法

key_lenの意味MySQL では、次に示すように、explain を使用して SQL ステートメ...

中国語ウェブコンテンツを紹介する10の経験

<br /> テキスト、シンボル、リンクの 3 つの側面に焦点を当て、主に中国語で、私の...

Vue3 ページ、メニュー、ルートの使用

目次1. メニューをクリックしてジャンプ1. ページ名の統一2. 管理ページを追加3. ルートを追加...

Jenkins+Docker継続的インテグレーションの実装

目次1. Jenkinsの紹介2. Jenkinsをインストールしてデプロイする1. 環境情報2. ...

CentOS での samba フォルダ共有サーバー構成の詳細な説明

1. はじめに最近、CentOS での開発には多くの不便があることがわかりました。Windows/M...

Linux でのソース パッケージ インストールのサービス管理

目次1. ソースパッケージサービスの起動管理2. ソースパッケージサービスのセルフスタート管理3. ...

mysql update文の実行プロセスの詳細な説明

以前、MySQL クエリ文の実行プロセスについての記事がありました。ここでは、更新文の実行プロセスを...