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

推薦する

Harborを使用してプライベートDockerリポジトリを構築する方法

目次1. オープンソースの倉庫管理ツール Harbor 2 インストール2.1 DockerとDoc...

SQL 実践演習: オンライン モール データベース ユーザー情報データ操作

オンラインショッピングモールデータベース - ユーザー情報データ運用プロジェクトの説明電子商取引の台...

VMware Workstation Pro は Win10 ピュア バージョンのオペレーティング システムをインストールします

この記事では、VMware Workstation Pro で Win10 オペレーティング システ...

MySQL 8.0 redo ログの詳細な分析

目次序文REDOログの生成REDOログ送信REDOログの保存と通知ユーザースレッドに通知要約する序文...

MySQLデータベースの管理者パスワードを忘れた場合の解決策

1. コマンド mysqld --skip-grant-tables を入力します (前提条件: m...

4つの柔軟なScssコンパイル出力スタイル

多くの人は、Scss を使用する瞬間からコンパイル方法を説明されてきました。したがって、コマンドのコ...

MySQLはテーブル内のフィールドを別のテーブル内のフィールドの値と等しくなるように更新します

以下のように表示されます。 table1 を z として更新し、table2 を zb として結合し...

Linuxシステムはルートアカウントのリモートログインコマンドを禁止しています

ps: Linux システムで root アカウントのリモート ログインを無効にする方法は次のとおり...

Vue で SuperMap を使用する練習

目次序文関連資料Vue プロジェクトが 2 次元ハイパーグラフを導入ハイパーグラフ 2D ケース引用...

MySQL ディープページング問題の解決の実践記録

目次序文ディープページングを制限すると遅くなるのはなぜですか?サブクエリによる最適化B+ツリー構造の...

HTML タグのメタ概要、HTML5 のヘッド メタ属性の概要

序文metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うで...

Vue プロジェクトはファイルダウンロードの進行状況バー機能を実装します

日常業務でファイルをダウンロードする一般的な方法は 2 つあります。 1 つ目は、サーバーのファイル...

Linux での mysql-5.7.28 インストール チュートリアル

1. 公式ウェブサイトから Linux バージョンをダウンロードします: https://dev.m...

Vueパンくずコンポーネントのカプセル化方法

Vueはパンくずコンポーネントをカプセル化して参照します。具体的な内容は次のとおりです。効果を達成す...

MySQL データベースは何をしますか?

MySQL はリレーショナル データベース管理システムです。リレーショナル データベースは、すべて...