Docker を使用して Spring Boot をデプロイする方法

Docker を使用して Spring Boot をデプロイする方法

Docker テクノロジの開発により、マイクロサービスの実装にさらに便利な環境が提供されます。Docker を使用して Spring Boot をデプロイするのは実はとても簡単です。この記事で簡単に学びましょう。

まず、シンプルな Spring Boot プロジェクトをビルドし、次にプロジェクトに Docker サポートを追加し、最後にプロジェクトをデプロイします。

シンプルなSpring Bootプロジェクト

pom.xmlでは、Spring Boot 2.0関連の依存関係を使用します。

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

ウェブとテストの依存関係を追加する

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

Hello Docker! を返す index() メソッドを持つ DockerController を作成します。

@レストコントローラ
パブリッククラスDockerController {
  
  @リクエストマッピング("/")
  パブリック文字列インデックス(){
    「Hello Docker!」を返します。
  }
}

スタートアップクラス

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

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

追加したら、プロジェクトを起動します。起動が成功したら、ブラウザ http://localhost:8080/ を開くと、Hello Docker! というページが返され、Spring Boot プロジェクトが正常に構成されていることが示されます。

Spring Boot プロジェクトが Docker サポートを追加

pom.xml-propertiesにDockerイメージ名を追加します。

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

プラグインに Docker ビルド プラグインを追加します。

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

src/main/docker ディレクトリに Dockerfile ファイルを作成します。Dockerfile ファイルは、イメージのビルド方法を説明するために使用されます。

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

この Dockerfile は非常にシンプルです。JDK の基本環境を構築し、イメージに Spring Boot Jar を追加します。以下に簡単な説明を示します。

  • FROM は、Jdk8 環境をベースイメージとして使用することを意味します。イメージがローカルにない場合は、DockerHub からダウンロードされます。
  • VOLUME、VOLUME は /tmp ディレクトリを指します。Spring Boot は組み込みの Tomcat コンテナを使用するため、Tomcat はデフォルトで /tmp を作業ディレクトリとして使用します。このコマンドの効果は、ホストの/var/lib/dockerディレクトリに一時ファイルを作成し、コンテナの/tmpディレクトリにリンクすることです。
  • 追加、ファイルをコピーして名前を変更する
  • ENTRYPOINT、Tomcatの起動時間を短縮するには、java.security.egdシステムプロパティを追加して、ENTRYPOINTとして/dev/urandomを指定します。

これで、Spring Boot プロジェクトへの Docker 依存関係の追加が完了します。

パッケージ環境を構築する

Spring Boot プロジェクトをパッケージ化するには Docker 環境が必要です。Windows 上で Docker 環境を構築するのは面倒なので、Centos 7 を例に説明します。

Docker環境をインストールする

インストール

yumでdockerをインストール

インストールが完了したら、次のコマンドを使用して Docker サービスを起動し、起動時に開始するように設定します。

サービスdocker開始
chkconfig docker オン

#LCTT 注釈: ここでは古い sysv 構文が使用されています。たとえば、CentOS 7 でサポートされている新しい systemd 構文は次のとおりです。
systemctl で docker.service を起動します。
systemctl で docker.service を有効にする

Docker China Acceleratorの使用

:vi /etc/docker/daemon.json を編集します。

#追加後:
{
  "レジストリミラー": ["https://registry.docker-cn.com"],
  「ライブリストア」:true
}

dockerを再起動する

systemctl dockerを再起動します

docker のバージョンを入力します。バージョン情報が返されれば、インストールは成功です。

JDKをインストールする

yum -y java-1.8.0-openjdk* をインストールします

環境変数を設定する vim /etc/profileを開き、次の内容を追加します

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64 をエクスポートします。 
エクスポート PATH=$PATH:$JAVA_HOME/bin 

変更が完了したら、有効にします

ソース /etc/profile

java -version と入力したときにバージョン情報が返された場合、インストールは成功しています。

MAVENのインストール

ダウンロード: http://mirrors.shu.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz

## tar vxf apache-maven-3.5.2-bin.tar.gz を解凍します
## mv apache-maven-3.5.2 /usr/local/maven3 を移動します

環境変数を変更し、/etc/profileに次の行を追加します。

MAVEN_HOME = /usr/local/maven3
MAVEN_HOMEをエクスポートする
PATH=${PATH}:${MAVEN_HOME}/bin をエクスポートします。

環境変数を有効にするには、必ず source /etc/profile を実行してください。

mvn -version と入力し、バージョン情報が返された場合はインストールは成功しています。

これでビルド環境全体の構成が完了します。

Dockerを使用してSpring Bootプロジェクトをデプロイする

spring-boot-docker プロジェクトをサーバーにコピーし、パッケージ化とテストのためのプロジェクト パスを入力します。

#パッケージ化 mvn パッケージ
#java -jar target/spring-boot-docker-1.0.jar を起動します

Spring Bootの起動ログを見ると、環境設定に問題がないことがわかります。次に、DockerFileを使用してイメージをビルドします。

mvn パッケージ docker:build

最初のビルドは少し遅くなる場合がありますが、次のメッセージが表示されたらビルドは成功です。

...
ステップ 1: openjdk:8-jdk-alpine から
 ---> 224765a6bdbe
ステップ2: ボリューム/tmp
 ---> キャッシュの使用
 ---> b4e86cc8654e
ステップ3: spring-boot-docker-1.0.jar app.jarを追加する
 ---> a20fe75963ab
中間コンテナ593ee5e1ea51の削除
ステップ 4: ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
 ---> 85d558a10cd4 で実行中
 ---> 7102f08b5e95
中間コンテナ 85d558a10cd4 を削除しています
7102f08b5e95 の構築に成功しました
[INFO] springboot/spring-boot-docker をビルドしました
[情報]  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
[情報] ビルド成功
[情報]  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
[情報] 合計時間: 54.346 秒
[情報] 終了日時: 2018-03-13T16:20:15+08:00
[情報] 最終メモリ: 42M/182M
[情報]  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 

ビルドされたイメージを表示するには、docker images コマンドを使用します。

Docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
springboot/spring-boot-docker 最新 99ce9468da74 6 秒前 117.5 MB

springboot/spring-boot-docker は私たちが構築したイメージです。次のステップはイメージを実行することです。

docker run -p 8080:8080 -t springboot/spring-boot-docker

起動が完了したら、docker ps を使用して実行中のイメージを表示します。

ドッカーps
コンテナID イメージ コマンド 作成ステータス ポート名
049570da86a9 springboot/spring-boot-docker "java -Djava.security" 30 秒前 27 秒前に起動 0.0.0.0:8080->8080/tcp determination_mahavira

構築したコンテナが動作しているのがわかります。ブラウザでhttp://192.168.0.x:8080/にアクセスし、

こんにちは、Docker!

これは、Spring Boot プロジェクトが Docker を使用して正常にデプロイされたことを示しています。

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

以下もご興味があるかもしれません:
  • Idea による Springboot の Docker への Java リモート ワンクリック デプロイ
  • Dockerfile を使用して SpringBoot プロジェクトをデプロイする方法
  • Docker で Spring Boot プロジェクトをデプロイするプロセスの詳細な説明
  • Docker を使用してプロジェクトを迅速にデプロイするための Spring Boot の手順を完了します。
  • Spring Boot と Docker を使用してマイクロサービスをデプロイする方法
  • Docker を使用して Spring Boot アプリケーションをデプロイする例
  • アイデアに基づいてSpringbootプロジェクトをDockerにデプロイする

<<:  MySQL 8.0.12 のインストールと使用方法のチュートリアル

>>:  js を使用して画像をモザイク化する方法の例

推薦する

CSS での三角形の描画と巧妙な応用例の詳細な説明

鉛Web ページ上の一般的な三角形の一部は、画像やフォント アイコンにする必要なく、CSS を使用し...

Markodwnによるタイトル配置による同期スクロールのアイデアの詳細な説明

序文私が作成中の Markodwn エディターに同期スクロール機能を追加する必要があります。Baid...

Redhat 7.3 に MySQL 8.0.22 をインストールするための詳細なチュートリアル (バイナリ インストール)

目次1. MySQLインストールパッケージをダウンロードする2. MySQLのアンインストール手順3...

操作タイムアウトがないときにMySQLサーバーがアクティブに切断される問題を解決します

MySQL サービスを使用する場合、通常の状況では、MySQL のタイムアウト設定は 8 時間 (2...

Linux でハイパースレッディング技術を動的に有効/無効にする方法の詳細な説明

序文Intel のハイパースレッディング テクノロジーにより、1 つの物理コア上で 2 つのスレッド...

JS を使って 1 分で github+Jekyll ブログに訪問カウント機能を追加する実装

目次1分でgithub+Jekyllブログにトラフィック機能を追加する1. ジェクルとは何か1. J...

CSS を使用して複数列の等高レイアウトを設定する方法の例

最初は、複数の列のコンテンツのサイズと高さが異なります。ここで、表示する背景を異なるものに設定し、各...

MySQL インデックスに関するヒントのまとめ

目次1. インデックスの基礎知識1.1 インデックスの利点1.2 インデックスの有用性1.3 インデ...

Vue-Jest自動テストの基本構成の詳しい説明

目次インストール構成よくある間違い事前テスト作業依存関係の扱いインスタンスとDOMを生成する要約する...

docker ベースの redis-sentinel クラスターの構築例

1. 概要Redis Cluster は、Redis ノードのグループ間での高可用性とシャーディング...

Div CSS 命名標準 CSS クラスの命名規則 (SEO 標準に準拠)

検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...

オブジェクトのプロパティを反復処理する際の TypeScript の問題

目次1. 問題2. 解決策1. オブジェクトをanyとして宣言する2. オブジェクトのインターフェー...

乱数、文字列、日付、検証コード、UUIDを生成するMySQLメソッド

目次乱数を生成する0から1までの乱数を生成する指定された範囲内で乱数を生成します6桁のモバイル認証コ...

MySQL information_schema データベースの詳細な説明

1. 概要information_schema データベースは performance_schema...

CSS を使用して三角形を実装する一般的な手法 (複数の方法)

面接の経験によっては、CSS に関する質問がよく見られ、CSS を使用して三角形を描画する方法につい...