SpringBoot アプリケーションの Docker デプロイメントの実装手順

SpringBoot アプリケーションの Docker デプロイメントの実装手順

序文

プロジェクトをデプロイするときに、node.js、Redis、RabbitMQ、MySQL などに依存する必要がある場合があります。これらのサービスのデプロイに必要な関数ライブラリと依存関係は異なり、互いに競合する可能性もあります。これにより、展開に大きな困難が生じました。 Docker はこれらの問題を巧みに解決しました。依存関係の互換性の問題を解決するために、Docker は次の 2 つの方法を使用します。

  1. アプリケーションのLibs(関数ライブラリ)、Deps(依存関係)、および構成をアプリケーションと一緒にパッケージ化します。
  2. 相互干渉を避けるために、各アプリケーションを分離されたコンテナ内で実行します。

ここに画像の説明を挿入

この記事では、通常 SpringBoot を使用して開発するプロジェクトを Docker を使用してデプロイする方法について説明します。

ここに画像の説明を挿入

Dockerファイル

Dockerfile とは何ですか?

Dockerfile は、イメージをビルドするために使用されるテキスト ファイルです。テキスト コンテンツには、イメージをビルドするために必要な手順と指示が含まれています。

ここに画像の説明を挿入

Dockerfile 構文

カスタム イメージを構築するときに、各ファイルを 1 つずつコピーしてパッケージ化する必要はありません。

Docker に伝える必要があるのは、イメージの構成、必要な BaseImage、コピーする必要があるファイル、インストールする必要がある依存関係、および起動スクリプトだけです。将来的には、Docker がイメージの構築を支援してくれるでしょう。

上記の情報を記述したファイルがDockerfileファイルです。

Dockerfile は、イメージを構築するために実行する操作を記述した命令が含まれるテキスト ファイルです。各命令はレイヤーを形成します。

ここに画像の説明を挿入

SpringBoot プロジェクトのパッケージ化

準備プロジェクト:

プロジェクトポート

サーバーポート=8080

テンプレートフォルダに新しいindex.htmlを作成します。

<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<ヘッド>
    <メタ文字セット="UTF-8">
    <title>Docker デプロイメント SpringBoot アプリケーション</title>
</head>
<本文>
<h1>SpringBoot アプリケーションの Docker デプロイメント</h1>
<img src="/static/img/2.jpg" alt="" width="100%">
</本文>
</html>

ホームページコントローラを定義してインデックスにジャンプする

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

    @リクエストマッピング("/")
    パブリック文字列インデックス(){
        「インデックス」を返します。
    }
}

効果をローカルでプレビューします。

ここに画像の説明を挿入

SpringBootアプリケーションをローカルのjarにパッケージ化する

maven-compiler-pluginプラグインを準備する

<ビルド>
	<!--コンパイルされパッケージ化されたファイル名-->
	<finalName>アプリ</finalName>
	<プラグイン>
		<プラグイン>
			<!--GAV 座標 (G 組織 ID、A プロジェクト ID、V バージョン番号)-->
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<バージョン>3.8.1</バージョン>
			<!--構成:
		    一般的に言えば、ターゲットとソースは一致していますが、プログラムを他のバージョンの JDK で実行できるようにするため (ターゲット JDK のバージョンが低い場合、ソース コードは、バージョンが低い JDK でサポートされていない構文を使用できません)、ターゲットがソースと異なる状況が発生することがあります -->
			<構成>
				<!-- ソースコードで使用される JDK バージョン -->
				<ソース>1.8</ソース>
				<!-- 生成されるターゲット クラス ファイルのコンパイル済みバージョン -->
				<target>1.8</target>
				<!-- 中国語の文字化けを防ぐための文字セットのエンコード -->
				<encoding>UTF-8</encoding>
			</構成>
		</プラグイン>
	</プラグイン>
</ビルド>

Maven はプロジェクト管理ツールです。コードのコンパイルに使用する JDK バージョンを指定しないと、コンパイル プラグイン maven-compiler-plugin のデフォルトの JDK バージョンが使用され、処理されます。これにより、バージョンの不一致の問題が発生しやすくなり、コンパイルが失敗する可能性があります。たとえば、コードが関数型プログラミングなどの Java 8 の新機能を使用しているが、Maven がコンパイル時に Java 7 を使用する場合、このコードを .class ファイルにコンパイルすることはまったく不可能です。この状況を回避するには、Maven プロジェクトをビルドするときに、最初のステップとして、Maven-compiler-plugin プラグインを構成し、プロジェクト ソース コードの JDK バージョン、コンパイルされた JDK バージョン、およびエンコード方法を指定します。

次にcleanを実行し、最後にpackageを実行してプロジェクトをパッケージ化します。

ここに画像の説明を挿入

BUILD SUCCESS メッセージは、パッケージが正常に完了したことを示します。

ここに画像の説明を挿入

パッケージ化が成功すると、ターゲットフォルダが表示され、パッケージ化されたjarパッケージがディレクトリ内に格納されます。

ここに画像の説明を挿入

jarパッケージとDockerfileを準備する

jar をデスクトップまたはカスタムの場所にコピーし、ローカルで Dockerfile ファイルを作成して書き込みます (注:名字必須為Dockerfile,去掉后綴名)

ここに画像の説明を挿入

Dockerfileの作成

Dockerfileの手順

java:8-alpine より
コピー ./app.jar /tmp/app.jar
エントリポイント java -jar /tmp/app.jar

Dockerfileの説明

java:8-alpine より:

java8 をベースにイメージをビルドします。デフォルトでは、Java イメージをビルドするには、環境変数をインストールして構成する必要があります。java:8-alpine イメージでは、これまでの手順がすべて完了しています。

コピー ./app.jar /tmp/app.jar

jarパッケージをコピーする

エントリポイント java -jar /tmp/app.jar

エントリーコマンド

ツールを使用してjarとDockerfileをサーバーにアップロードします

アップロード場所は個人によって異なります。私は /tmp/docker に保存しています。

一時ファイル
mkdir ドッカー

アップロードファイルを選択

ここに画像の説明を挿入

/tmp/dockerディレクトリにアップロードする

ここに画像の説明を挿入

イメージを構築する

ファイルをアップロードしたディレクトリに移動します: cd /tmp/dockerlsと入力してファイルを表示します

ここに画像の説明を挿入

イメージをビルドするためのコマンドを入力します

docker build -t テスト:1.0 。

格式:docker build -t 鏡像名稱:版本號Dockerfile所在目錄路徑

コマンドの説明:

build : Dockerのセカンダリコマンド

  • イメージを構築する

-t

  • - 名前: 一般的なイメージ名の形式: 名前: バージョン番号 ( test:1.0 )

.

  • Dockerfile が配置されているディレクトリ。Dockerfile が配置されているディレクトリを入力したので、 .は現在のディレクトリを表します。

イメージをビルドするときに、Dockerfileに記述した3つのコマンドに従って3つのステップで実行されることがわかります。

ここに画像の説明を挿入

ミラーを見る

Docker でイメージ コマンドを表示します。

Docker イメージ

カスタム画像テストを見ることができます

ここに画像の説明を挿入

コンテナを作成して実行する

Docker イメージ コマンドを実行します。

docker run --name springboot -p 8080:8080 -d test:1.0

コマンドの説明:

docker run : dockerセカンダリコマンド

  • コンテナを作成して実行する

--name

  • コンテナ名を定義し、その後にコンテナ名 ( springboot ) を続ける

-pポートマッピング

  • 左側のポートはLinuxポート、右側のポートはコンテナのポート番号です
  • Linuxポートをコンテナポート番号にマッピングし、Linuxポートへのアクセスがコンテナポート番号へのアクセスと同じになるようにします。

-d

  • コンテナをバックグラウンドで実行します。そうしないと、コンテナは終了後に実行を停止します。

test:1.0 –>イメージ名

  • コンテナを作成するには、カスタムイメージtestのバージョン1.0を選択します

コンテナが作成され、正常に実行されました。

ここに画像の説明を挿入

実行中の画像を見る

画像コマンドの実行

ドッカーps 

ここに画像の説明を挿入

ブラウザはサーバーのポート8080にアクセスします

ここに画像の説明を挿入

モバイルアクセス:

ここに画像の説明を挿入

ログを表示

コンテナログコマンドの表示

docker ログ -f springboot

例:

コンテナのログを表示しますが、リアルタイムで更新されません。新しいログを表示するには、再度実行する必要があります。

docker ログ + コンテナ名

リアルタイム更新ログ

docker logs -f + コンテナ名

ここに画像の説明を挿入

Docker デプロイ SpringBoot アプリケーション チュートリアルは終了です。

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

以下もご興味があるかもしれません:
  • SpringBoot と Docker の統合の詳細なプロセス
  • Springboot アプリケーションを迅速にデプロイするために Docker とアイデアを統合する詳細なプロセス
  • SpringBoot プロジェクトの Docker クイック デプロイメントの紹介

<<:  HTMLとXHTML、HTML4とHTML5のタグの違いについて簡単に紹介します。

>>:  カルーセルバナーの自動回転効果を実現する純粋な CSS

推薦する

MySQL の pid とソケットの詳細な説明

目次1. pidファイルの紹介2.ソケットファイルの紹介要約:ソケット ファイル: Unix ドメイ...

Vue3における7種類のコンポーネント通信の詳細

目次1. Vue3コンポーネント通信方式2. Vue3通信の使い方2.1 小道具2.2 $エミット2...

MySQLの一般クエリログとスロークエリログの分析

MySQL のログには、エラー ログ、バイナリ ログ、一般クエリ ログ、スロー クエリ ログなどが含...

Tomcat で server.xml と content.xml を変更した後の自動復元の問題の解決方法

設定ファイルを server.xml と content.xml に書き込みます。サーバーを再起動す...

CSS フロントエンドの知識ポイントのまとめ(必読)

1. CSS の概念: (カスケーディング スタイル シート)利点: 1. コンテンツとプレゼンテ...

nginx をプロキシ キャッシュとして使用する方法

キャッシュを使用する目的は、バックエンドの負荷を軽減し、Web サイトの同時実行性を向上させることで...

ファイル操作のためのLinuxシステムコール

目次1. ファイルを開くパラメータの紹介2. ファイルの読み取り3. ファイルを書き込む4. 閉じる...

MySQLのパラメータについてお話しましょう

序文:以前の記事では、特定のパラメータの機能についてよく紹介してきました。しかし、MySQL パラメ...

Linux で Oracle データベースをバックアップするためのスケジュールされたタスクの設定に関するチュートリアル

1. データベースの文字セットを確認するデータベースの文字セットは、Linux で設定された環境変数...

Docker初心者が初めてよく使うコマンドを試してみる練習記録

Docker を正式に使用する前に、まず Docker でよく使用されるコマンドに慣れておきましょう...

Vue ボタンの権限制御の導入

目次1. 手順1. ボタンの権限を定義する2. ストアを定義する3. 権限指示を作成する4. パーミ...

MySQLクライアントとサーバーのプロトコルの解釈

目次MySQL クライアント/サーバー プロトコルMySQL サーバーから高いパフォーマンスを得る必...

MySQL インデックスのパフォーマンス最適化の問題に対する解決策

MySQL によって作成される最適化はインデックスを追加することですが、インデックスを追加しても目的...

Javascript 共通高階関数の詳細

目次1. 一般的な高階関数1.1、フィルター1.2、地図1.3、減らすHigher Order fu...

Vue プロジェクトで SVG コンポーネントをパッケージ化して構成する手順

最近新しい会社に入社しました。プロジェクトに携わった後、タイトルアイコンが svg で作られていると...