SpringBootをDockerにデプロイし、jarパッケージを置き換える方法の詳細な説明

SpringBootをDockerにデプロイし、jarパッケージを置き換える方法の詳細な説明

docker のインストールと使用方法については、前の 2 つの記事を参照してください。 Docker Kubernetes ダッシュボードのインストールとデプロイメントの詳細、および Docker がリンクを使用してコンテナー間の接続を確立する方法。この記事では主に、Springboot プロジェクトを Docker にデプロイする方法を紹介します。 SpringBoot プロジェクトの作成方法の詳細については、この記事「IDEA で SpringBoot Web-MVC プロジェクトをビルドする際に発生した問題」を参照してください。

この記事では主に、Docker を使用して SpringBoot をデプロイする 3 つの方法、つまり、開始方法、jar パッケージ置換デプロイとスクリプト デプロイ、ステップ バイ ステップ チュートリアルを紹介します。なお、これら 3 つの方法の名前は私自身のものであり、非公式なものであることに注意してください。

プロジェクトディレクトリ

Dockerファイル

後で使用する Dockerfile ファイルを作成します。

# springboot ファイル実行用の Docker イメージ
# バージョン 0.0.1
# 著者: toutou
# ベースイメージはJavaを使用しています
java:8より
# VOLUME は一時ファイル ディレクトリを /tmp として指定します。
# 効果は、ホストの/var/lib/dockerディレクトリに一時ファイルを作成し、それをコンテナの/tmpにリンクすることです。
# ボリューム /tmp
# jar パッケージをコンテナに追加し、名前を app.jar に変更します。
learn-web-0.0.1-SNAPSHOT.jar app.jar を追加します。
# jar パッケージを実行します RUN bash -c 'touch /app.jar'
エントリポイント ["java","-jar","/app.jar"]
###起動ポート番号を宣言する#EXPOSE 8301

ファイルの展開

サーバー上に新しいフォルダー /data/docker/hellolearn を作成し (ファイル パスはカスタマイズできます)、Maven によってパッケージ化された jar と上記で作成した Dockerfile ファイルをサーバー上の新しいフォルダー (/data/docker/hellolearn) にコピーします。

画像を生成する

実行ファイル: docker build -t hellolearn 。

docker build -t イメージ名: タグ Dockerfile の相対位置。ドットは現在のディレクトリを表し、タグが書き込まれていない場合はデフォルトは最新です。

コンテナを起動する

docker run -d -p 8301:8301 --name hellolearn hellolearn

docker スタート hellolearn

-d パラメータはコンテナをバックグラウンドで実行します。--name は指定されたコンテナの名前です。-p はポート マッピングを行います。この場合、サーバーの 8301 ポート (コロンの前のポート) がコンテナの 8301 ポート (コロンの後のポート) にマッピングされます (application.properties は 8301 で構成されています)

ウェブサイトをご覧ください

JAR パッケージ マッピングの展開

上記の手順に従うと、docker デプロイメント springboot のプロセス全体を簡単に処理できます。ただし、コンテナを起動した後、jar パッケージを更新する必要があるたびに、イメージを再作成してからコンテナを再作成する必要があります。このプロセスは非常に面倒で非効率的です。では、イメージやコンテナを更新せずに、jar パッケージを直接更新してデプロイを完了するにはどうすればよいでしょうか?

5.1 Dockerfileの更新

# springboot ファイル実行用の Docker イメージ
# バージョン 0.0.1
# 著者: toutou
# ベースイメージはJavaを使用しています
java:8より
エクスポーズ8301
エントリポイント ["java","-jar","/data/learn-web-0.0.1-SNAPSHOT.jar"]

最後の行ENTRYPOINT ["java","-jar","/data/learn-web-0.0.1-SNAPSHOT.jar"]コンテナの /data ディレクトリにある learn-web-0.0.1-SNAPSHOT.jar ファイルを実行します。

5.2 docker buildコマンドを使用してイメージをビルドする

実行ファイル: docker build -t hellolearn 。

5.3 コンテナの作成と起動

docker run --name hellolearn -it -v /data/docker/newhellolearn/package:/data -d -p 8301:8301 hellolearn

-v ホスト ディレクトリをコンテナー ディレクトリに関連付けます。このようにして、ホストの /data/docker/newhellolearn/package ディレクトリが docker の /data ディレクトリにマッピングされます。

この場合、jar パッケージが変更されると、ホストの /data/docker/newhellolearn/package ディレクトリにある jar パッケージを直接更新できます。jar パッケージを更新した後、コンテナを再起動する必要があります。

スクリプトの展開

jar パッケージ方式によるデプロイメントでは、バージョン番号の変更など、jar パッケージ名が変更されると問題が発生します (learn-web-0.0.1-SNAPSHOT.jar-->>learn-web-1.0.1-SNAPSHOT.jar)。何をする必要がありますか?以下では、スクリプトによるデプロイメントの 3 番目の方法を紹介します。

6.1 hellolearn.shファイルを作成する

java -jar /data/learn-web-0.0.1-SNAPSHOT.jar

hellolearn.sh を /data/docker/hellolearn/scriptdeploy/package にアップロードします。このフォルダー パスはカスタマイズできます。後で使用するので、このフォルダー パスを覚えておいてください。

6.2 スクリプト実行権限を追加する

chmod +x hellolearn.sh を実行します。

6.3 Dockerfileを作成する

# springboot ファイル実行用の Docker イメージ
# バージョン 0.0.1
# 著者: toutou
# ベースイメージはJavaを使用しています
java:8より
エクスポーズ8301
コマンド ["sh","-c","/data/hellolearn.sh"]

CMD ["sh","-c","/data/hellolearn.sh"]コンテナの起動時に 6.1 で作成された hellolearn.sh スクリプトを開始することを意味します。

上記のテキストの最後のコマンドは ENTRYPOINT ですが、スクリプトの展開では CMD に変更されることに注意してください。ENTRYPOINT と CMD の具体的な違いに興味がある場合は、それについて学ぶことができます。

6.4 jarパッケージをアップロードする

jar パッケージを、hellolearn.sh と同じフォルダー ディレクトリ、つまり /data/docker/hellolearn/scriptdeploy/package に配置します。コンテナーを作成するときに、ディレクトリ (ホスト ディレクトリ) をコンテナーの /data ディレクトリにマップします。 。

6.5 ファイルディレクトリ構造図

ここのディレクトリ構造に混乱しているかどうかはわかりません。一目でわかるホストマシンのディレクトリ構造図をアップロードしました。

6.6 イメージの作成

スクリプトを docker build します。

末尾のドットは現在のディレクトリを表すため、イメージを生成するコマンドは Dockerfile が配置されているディレクトリで実行する必要があります。

6.7 コンテナの作成と起動

docker run --name hellolearn-script -it -v /data/docker/hellolearn/scriptdeploy/package:/data -d -p 8302:8301 hellolearn-script

docker でhellolearnスクリプトを起動します

ホストの /data/docker/hellolearn/scriptdeploy/package ディレクトリをコンテナの /data ディレクトリにマップします。この方法では、jar パッケージが変更された場合、ホスト ディレクトリ内の jar パッケージを直接更新できます。 jar パッケージの名前が変更された場合でも、hellolearn.sh スクリプトを更新する必要があります。更新後、コンテナを再起動します。

6.8 Webテストの結果

Docker ログを表示する

docker ログ [オプション] コンテナ ID

オプションの説明:

-f : トレースログ出力
--since : 特定の開始時刻からのすべてのログを表示します
-t : タイムスタンプを表示
--tail : 最新の N 個のコンテナログのみを一覧表示します

7.1 指定した時間後のログを表示し、最後の 100 行のみを表示します。

docker logs -f -t --since="2020-10-01" --tail=100 コンテナID

7.2 指定した期間のログを確認する

docker logs -t --since="2020-10-01T19:00:00" --until "2020-10-01T19:00:00" コンテナID

7.3 指定した時間後のログを表示します。

docker logs -t --since="2020-10-01T19:00:00" コンテナID

7.4 過去 5 分間のログを表示します。

docker logs --since 5m コンテナID

7.5 exec コマンドを使用して、指定されたコンテナ上で bash を実行します。

docker exec hellolearn -it /bin/bashまたはdocker exec -it hellolearn bash

7.6 Docker IP の表示

docker 検査 --format='{{.NetworkSettings.IPAddress}}' hellolearn

発生した問題

問題の説明: デーモンからのエラー応答: ドライバーはエンドポイント flamboyant_leavitt での外部接続のプログラミングに失敗しました (iptables が失敗しました: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8301 -j DNAT --to-destination 172.17.0.2:8301 ! -i docker0: iptables: その名前のチェーン/ターゲット/一致がありません。

解決策: Docker を再起動します。 systemctl restart docker

特定の問題の詳細については、「デーモンからのエラー応答: ドライバーがエンドポイント mysql3308 での外部接続のプログラミングに失敗しました (

ソースコードアドレス

https://github.com/toutouge/javademosecond/tree/master/hellolearn

SpringBoot を docker にデプロイして jar パッケージを置き換える方法についてはこれで終わりです。SpringBoot を docker にデプロイして jar パッケージを置き換える方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Springboot パッケージングを Docker イメージとして実装し、デプロイする
  • Docker に Tomcat をインストールし、Springboot プロジェクトの WAR パッケージをデプロイする方法
  • SpringBoot のパッケージ化と Docker へのアップロード、およびマルチインスタンス デプロイメントの実装に関する簡単な分析 (IDEA バージョン)
  • docker を使用して Linux 環境に Springboot パッケージをデプロイするチュートリアル

<<:  WeChatアプレットがSMSログインを実装

>>:  HTML テーブル マークアップ チュートリアル (5): ライト ボーダー カラー属性 BORDERCOLORLIGHT

推薦する

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

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

MySQL での limit の使用方法は何ですか (推奨)

SELECT * FROM テーブル名制限m,n; SELECT * FROM テーブル LIMI...

CentOS7 64 ビットでの MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビットMINI版、MySQL5.7をインストール1. YUM...

WeChatアプレットを使用して天井効果を実現する方法の例

目次1. 実装2. 問題点3. より良い実装方法があるかどうか検討する要約する背景は日付のタイトルで...

BootStrap グリッド間に隙間を残す解決策

目次[例を見る]: 【本来の効果は以下の通り】理由は次のとおりです。 【解決】:要約するBootSt...

VueのID認証管理とテナント管理の詳細な説明

目次概要ボタンレベルの権限アイデンティティ認証管理R/U 権限権限の更新テナント管理テナント切り替え...

MySQL クエリ ステートメントのプロセスと EXPLAIN ステートメントの基本概念とその最適化

ウェブサイトやサービスのパフォーマンスは、データベースの設計(適切な言語開発フレームワークを選択した...

JavaScript初心者がよく犯す間違い

目次序文undefined と null の混同紛らわしい数値の加算と文字列の連結戻り文の改行の問題...

Vueのウェブページスクリーンショット機能の詳しい説明

最近、プロジェクトで写真をアップロードする要件があるのですが、顧客がアップロードする写真のサイズがま...

HTML での一般的なリダイレクト接続の例コード

コードをコピーコードは次のとおりです。 window.location.href="zcb...

mysql の存在する例と存在しない例の詳細な説明

mysql の存在する例と存在しない例の詳細な説明テーブルA |列1 | 列1 | 列3 |テーブル...

Vue はネストされたルーティングメソッドの例を実装します

1. ネストされたルーティングはサブルーティングとも呼ばれます。実際のアプリケーションでは、通常、ネ...

MySQLは変数を使用してさまざまなソートを実装します

コアコード -- 以下では、MySQLでのソート列の実装を示します -- テストデータ CREATE...

MySQLデータベースにパスワードを入力した後にフラッシュバックする問題の解決策

パスワード入力後にMySQLデータベースがクラッシュする問題と解決策1 ケースの説明最近、基本的な機...

ウェブページコンテンツの閲覧設計手法に関する議論

<br />コンテンツ ページの記事の場合、記事が長すぎる場合やカテゴリ (ランキング)...