Docker で Spring-boot プロジェクトをデプロイするためのサンプル コード

Docker で Spring-boot プロジェクトをデプロイするためのサンプル コード

1. 基本的な Spring-boot クイックスタート

1.1 クイックスタート pom.xml は以下の依存関係を追加します

<親>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <バージョン>2.0.5.RELEASE</バージョン>
  </親>

  <プロパティ>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </プロパティ>

  <依存関係>
    <依存関係>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </依存関係>
    <依存関係>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>テスト</scope>
    </依存関係>
  </依存関係>

  <ビルド>
    <finalName>スプリングドッカー</finalName>
    <プラグイン>
      <プラグイン>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </プラグイン>
    </プラグイン>
  </ビルド>

Spring-boot スタートアップクラス

@SpringBootアプリケーション
パブリッククラスDockerApplication {

  パブリック静的voidメイン(String[] args) {
    SpringApplication.run(DockerApplication.class、引数);
  }
}

APIのテスト

@レストコントローラ
パブリッククラスDockerStarterApi {

  @GetMapping("/api/docker/hello")
  パブリック文字列hello() {
    「hello docker」を返します。
  }
}

起動設定ファイルapplication.ymlを構成する

サーバ:
 port: 9090 # 効果を示すために、デフォルトのポート8080をここで変更します

Spring Bootをチェック

. ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|================|___/=/_/_/_/
 :: Spring Boot :: (v2.0.2.リリース)

...

2018-12-17 17:26:13.385 INFO 48740 --- [ main] osjeaAnnotationMBeanExporter: 起動時に JMX 公開用の Bean を登録しています
2018-12-17 17:26:13.448 INFO 48740 --- [ main] osbwembedded.tomcat.TomcatWebServer : Tomcat がポート 9090 (http) でコンテキスト パス '' で起動しました
2018-12-17 17:26:13.453 INFO 48740 --- [ main] pers.study.docker.DockerApplication: DockerApplication を 1.982 秒で開始しました (JVM は 2.602 秒実行中)

APIが有効かどうかを確認する

$ curl -XGET 'http://localhost:9090/api/docker/hello'
こんにちはドッカー

ブラウザチェック

http://localhost:9090/api/docker/hello

1.2 パッケージングと起動

プロジェクトパッケージ

上記の手順を完了したら、パッケージ化コマンドを実行します。

$ mvn clean -U -Dmaven.test.skip パッケージをコンパイル

上記の pom ファイルでfinalNameが定義されているため、コンパイルおよびパッケージ化後にtargetディレクトリにspring-docker.jarが生成されることがわかります。

<finalName>スプリングドッカー</finalName>

試運転

$ java -jar ターゲット/spring-docker.jar

何も問題がなければ(質問があればメッセージを残してください〜)、実行結果は上記と同じになり、APIが有効かどうかを確認します。

2. Dockerのクイックインストール

次にDockerを準備します

インストール

公式サイトからダウンロードしてインストールする

インストールの確認、ヘルプの表示

$ docker --version
Docker バージョン 18.06.0-ce、ビルド 0ffa825

$ docker --help
使用方法: docker [オプション] コマンド
コンテナ用の自己完結型ランタイム
...

ミラー加速

中国公式ミラー加速

3. Spring-boot + Dockerを構成する

pom.xmlにdockerプラグインを追加する

<プロパティ>
    <docker.image.prefix>スプリングブート</docker.image.prefix>
  </プロパティ>

  <ビルド>
    <プラグイン>
      <!-- Docker Maven プラグイン -->
      <プラグイン>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <バージョン>1.0.0</バージョン>
        <構成>
          <イメージ名>${docker.image.prefix}/${project.build.finalName}</イメージ名>
          <dockerディレクトリ>src/main/docker</dockerディレクトリ>
          <リソース>
            <リソース>
              <ターゲットパス>/</ターゲットパス>
              <ディレクトリ>${project.build.directory}</ディレクトリ>
              <include>${project.build.finalName}.jar</include>
            </リソース>
          </リソース>
        </構成>
      </プラグイン>
    </プラグイン>
  </ビルド>

Dockerfileを作成する

上記のpom.xmlファイルの設定によると、 <dockerDirectory>src/main/docker</dockerDirectory> 、docker 設定ファイルのディレクトリはここに設定されているため、 src/mainの下に docker フォルダーを作成し、同時にDockerfileファイルを作成する必要があります。

ディレクトリ構造は次のとおりです。

Docker 構成ファイルの構造.png

Dockerfileを編集する

openjdk:8-jdk-alpine から
ボリューム /tmp
spring-docker.jar app.jar を追加します。
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

FROMは、イメージがJava 8に基づいていることを示します。

VOLUMEはマウントディレクトリを示します

ADDはパッケージ化されたファイルをコピーし、 app.jarに名前を変更します。

以下の公式ドキュメントによると、ENTRYPOINT は Tomcat の起動時間を短縮するために追加されたシステム プロパティです。

Spring Boot アプリケーションがデフォルトで Tomcat の作業ディレクトリを作成する場所が /tmp であるため、 /tmpを指すVOLUMEを追加しました。その結果、ホストの/var/lib/dockerの下に一時ファイルが作成され、 /tmpの下のコンテナーにリンクされます。この手順は、ここで作成した単純なアプリではオプションですが、ファイルシステムに実際に書き込む必要がある他の Spring Boot アプリケーションでは必須になる場合があります。

Tomcat の起動時間を短縮するために、エントロピーのソースとして「/dev/urandom」を指すシステム プロパティを追加しました。Tomcat の「標準」バージョン (またはその他の Web サーバー) を使用する場合、Spring Boot の最新バージョンではこれは必要ありません。

設定が完了しました!

4. DockerがSpring-bootを起動する

moduleに入り、実行します:

$ mvn パッケージ docker:build

[INFO] プロジェクトをスキャンしています...

...

 ---> e1f8aba72bdf で実行中
中間コンテナ e1f8aba72bdf を削除しています
 ---> 36a61c09f09a
進捗メッセージ{id=null、ステータス=null、ストリーム=null、エラー=null、進捗=null、進捗詳細=null}
36a61c09f09a の構築に成功しました
springboot/spring-docker:latest のタグ付けに成功しました
[INFO] springboot/spring-docker をビルドしました
[情報]  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
[情報] ビルド成功
[情報]  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
[情報] 合計時間: 6.367 秒
[情報] 終了日時: 2018-12-17T20:48:21+08:00
[情報]  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 

ミラーを見る

$ docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
springboot/spring-docker 最新 36a61c09f09a 2 分前 123MB

画像を実行する

$ docker run -p 9090:9090 -t springboot/spring-docker
 . ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|================|___/=/_/_/_/
 :: Spring Boot :: (v2.0.2.リリース)

2018-12-17 12:53:21.502 INFO 1 --- [ main] pers.study.docker.DockerApplication : PID 1 の 94991c04be5d で DockerApplication v1.0-SNAPSHOT を開始しています (/app.jar は / で root によって開始されました)
2018-12-17 12:53:21.509 INFO 1 --- [ main] pers.study.docker.DockerApplication: アクティブなプロファイルが設定されていません。デフォルトのプロファイルにフォールバックします: default

···

2018-12-17 12:53:25.255 INFO 1 --- [ main] osjeaAnnotationMBeanExporter : 起動時に JMX 公開用の Bean を登録しています
2018-12-17 12:53:25.337 INFO 1 --- [ main] osbwembedded.tomcat.TomcatWebServer : Tomcat がポート 9090 (http) でコンテキスト パス '' で起動しました
2018-12-17 12:53:25.353 INFO 1 --- [ main] pers.study.docker.DockerApplication: DockerApplication を 4.485 秒で起動しました (JVM は 5.346 秒実行中)

コンテナを表示

$ docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
94991c04be5d springboot/spring-docker "java -Djava.securit…" 53 秒前 52 秒前 0.0.0.0:9090->9090/tcp quizzical_bhabha

起動の確認とAPIへのアクセス

$ curl -XGET 'http://localhost:9090/api/docker/hello'
こんにちはドッカー

この時点で、spring-boot の Docker デプロイは完了です。

5. 画像を削除する

コンテナを停止する

$ docker stop 94991c04be5d
94991c04be5d

コンテナの削除

$ docker rm 94991c04be5d
94991c04be5d

画像の削除

$ docker イメージ rm springboot/spring-docker
タグなし: springboot/spring-docker:latest
削除済み: sha256:36a61c09f09ab88cfe5a05f564deb57498682f4a6f3ec01d2a8c4fdc80ac1e41
削除済み: sha256:3f9aef70be6d4d43c205454d8874f10bc2f7280f70eb88cd1f04937b7965dd27
削除済み: sha256:9a5800e93615bb4c5128bb36d31ec494327c01f1a9a768c1ff538badf76628b9
削除済み: sha256:d9c66f907448fa9e61fd5f9267d7fcf8e1f4b52d0a20466414f2f45777261284

6. その他の設定機能

環境プロパティの追加

$ docker run -e "SPRING_PROFILES_ACTIVE=prod" -p 9090:9090 -t springboot/spring-docker

バックグラウンドで実行を開始する

$ docker run -p 9090:9090 -d springboot/spring-docker

コンテナのデバッグを有効にし、 Dockerfileを変更する

openjdk:8-jdk-alpine から
ボリューム /tmp
spring-docker.jar app.jar を追加します。
環境変数JAVA_OPTS''
CMD java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar app.jar

ドッカー実行

次のようにコードをコピーします
$ docker run -e "JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n" -p 9090:9090 -p 5005:5005 -t springboot/spring-docker

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker デプロイメント Springboot プロジェクト例の分析
  • Docker を使用してプロジェクトを迅速にデプロイするための Spring Boot の手順を完了します。
  • Idea による Springboot の Docker への Java リモート ワンクリック デプロイ
  • SpringbootはDockerデプロイメントを統合し、Dockerイメージを構築する2つの方法を実装します。
  • Springbootプロジェクトでwarパッケージdockerパッケージをビルドし、リソースの下に静的リソースが見つからない場合の解決策
  • DockerへのSpring Bootアプリケーション公開の実装
  • Spring Boot と Docker のデプロイメントの実践
  • Springboot dockerの原理とプロジェクト構築

<<:  Vue+nodeはオーディオ録音・再生機能を実現

>>:  MySQLのパスワードを忘れた場合の対処方法

推薦する

Vueはソースコード付きのリファレンスライブラリのメソッドを使用します

monaco-editor-vueの公式ソースコードは次のとおりです。インデックス 'mon...

擬似分散グラフィックを実現するための VMware 構成 Hadoop チュートリアル

1. 実験環境シリアルナンバープロジェクトソフトウェアとバージョン1オペレーティング·システムCen...

docker システムコマンドセットの使用

目次docker システム df docker システム プルーンdocker systemc 情報...

MySQL の時間タイプの選択

目次日時タイムスタンプ選び方ミリ秒の時間を保存する方法結論MySQL は、日付と時刻を処理するために...

MySQL 8.0.25 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.25の最新のダウンロードとインストールのチュートリアルは参考になります。具体的な...

Vueはボールのスライディングクロス効果を実現します

この記事の例では、ボールのスライドとクロスの効果を実現するためのVueの具体的なコードを共有していま...

Windows 10 での MySQL 5.7.21 winx64 のインストールと設定方法のグラフィック チュートリアル

mysql 5.7.21 winx64 のインストールと設定方法: MySQLのコミュニティバージョ...

nginx で http でアクセスする Web サイトを https に変更する方法

目次1. 背景2. 前提条件https:証明書システム: 3. 操作プロセス3.1 証明書の生成3....

And キーワードを使用した MySQL の複数条件クエリ ステートメント

AND キーワードを使用した MySQL 複数条件クエリ。MySQL では、AND キーワードを使用...

Elasticsearchツールcerebroのインストールと使用チュートリアル

Cerebro は、Elasticsearch バージョン 5.x より前の Elasticsear...

Element-ui の組み込み 2 つのリモート検索 (ファジークエリ) の使用方法の説明

問題の説明フロントエンドリモート検索やファジークエリと呼ばれる種類のクエリがあります。 Ele.me...

シンプルなアコーディオン効果を実現するjs

この記事では、アコーディオン効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...

CentOS7 に YUM 経由で MySQL 5.7 をインストールする詳細な手順

1. インストールパッケージを保存する場所に移動しますcd /home/lnmp 2. MySQL ...

ショッピングカートの計算を実現する js メソッド

この記事の例では、ショッピングカートの計算を実装するためのjsの具体的なコードを参考までに共有してい...

要素タイムラインの実装

目次コンポーネント - タイムラインカスタムノードスタイルカスタムタイムスタンプコンポーネント - ...