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

推薦する

MySQLは効率的なインデックス例分析を確立する

この記事では、例を使用して、MySQL で効率的なインデックスを作成する方法について説明します。ご参...

MySQL 5.6 のインストール手順(画像とテキスト付き)

MySQL はオープンソースの小規模リレーショナル データベース管理システムです。現在、MySQL...

MySQLデータベースインデックスの詳細な紹介

目次マインドマップシンプルな理解インデックスモデルの進化二分探索木自己バランス型二分木BツリーB+ ...

select count() と select count(1) の違いと実行方法

Count(*) または Count(1) または Count([column]) は、おそらく S...

CentOS7.5 MySQLのインストールチュートリアル

1. まずシステムにmysqlがインストールされているかどうかを確認します rpm -qa | gr...

LinuxにPython 3.6をインストールして落とし穴を避ける

Python 3のインストール1. 依存環境をインストールするPython3 はインストール プロセ...

IdeaでMySQLデータベースに接続すると中国語の文字化けが発生する問題

問題: JDBCを使用してMySQLデータベースに接続すると、中国語の文字を挿入すると文字化けした文...

pt-heartbeat を使用して MySQL レプリケーションの遅延を監視する方法の詳細な説明

pt-ハートビートデータベースがマスターとスレーブ間で複製される場合、複製ステータスとデータ遅延は非...

CentOS 7 環境でソースコードから MySQL 5.7 をインストールする方法

この記事では、CentOS 7 環境でソース コードから MySQL 5.7 をインストールする方法...

MySQLトリガーの簡単な使用例

この記事では、例を使用して MySQL トリガーの簡単な使用方法を説明します。ご参考までに、詳細は以...

Dockerイメージを素早くデプロイして実行する最新のIDEAプロセスの詳細な説明

背景docker とアイデアを使用して、Java Web の開発、展開、運用までのプロセス全体を実現...

Linux システムで Code Cloud にプロジェクトをアップロードする方法

Code Cloudで新しいプロジェクトtest1を作成します。 公開鍵を取得するには次のコマンドを...

Windows Server 2012 でファイル サーバーを構築するための詳細な手順

ファイル サーバーは、企業内で最も一般的に使用されるサーバーの一つであり、主にファイル共有を提供する...

HTML における li タグの水平配置の例

ほとんどのナビゲーション バーは、下の図に示すように水平に配置されていますが、これはどのように実現さ...

アコーディオン効果を実現するネイティブ js

実際のWebページ開発でも、アコーディオンは頻繁に登場します。簡単なアコーディオンを作ったのですが、...