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

推薦する

入力ファイルの制御と美化について

一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると、[ファイルの選択]ダイアロ...

MySQL デッドロックのトラブルシューティングの全プロセス記録

【著者】 Liu Bo: Ctrip テクニカル サポート センターのシニア データベース マネージ...

Mac OS に MySQL 5.7.20 をインストールするための詳細なグラフィックとテキストの説明

Mac OS X で TAR.GZ から MySQL 5.7 をインストールする MySQL 5.6...

MySQLでスケジュールされたタスクを設定する方法の分析

この記事では、例を使用して、MySQL でスケジュールされたタスクを設定する方法について説明します。...

Windows に異なる (2 つの) バージョンの MySQL データベースをインストールする詳細なチュートリアル

1. 原因: SQL ファイルをインポートする必要があるのですが、インポートできません。この文を実行...

MYSQLストアドプロシージャ、つまり一般的な論理知識のポイントの要約

MySQL ストアド プロシージャ1. ストアドプロシージャ構文(フォーマット)を作成する 区切り文...

MySQLのメモリ使用量を表示する方法の詳細な説明

序文この記事では主にMySQLのメモリ使用量に関する関連コンテンツを紹介し、皆さんの参考と学習のため...

Nginx プロセス スケジューリングの問題の詳細な説明

Nginx は、マスター プロセス (MasterProcess) と、同じ数のホスト CPU コア...

vue+element で動的スキニングを実装するためのサンプルコード

プロジェクトのテーマがすべての人の美的感覚を満足できないこともあります。このとき、スキン変更機能は非...

MySQL Server 8.0.3 のインストールと設定方法のグラフィックチュートリアル

この文書はMySQL Server 8.0.3のインストールと設定方法を参考のために記録したものです...

コーディングスキルを向上させるためのJavaScriptのヒント

目次1. 一意の値をフィルタリングする2. 短絡評価2.1 シナリオ例3. ブール変換4. 文字列を...

MySQL 5.6.36 Windows x64 バージョンのインストールチュートリアルの詳細

1. 対象環境Windows 7 64ビット2. 材料(1)VC++2010リリースパッケージ(64...

Vueページの初回読み込み最適化の全プロセス

目次序文1. 画像の最適化2. .mapファイルの生成を無効にする3. ルーティングの遅延読み込み4...

WeChatアプレットはユーザーログインモジュールサーバーの構築を実装します

サーバーの構築には node.js を選択しました。まだインストールしていない方は、私の他の nod...

Angular の 12 の典型的な問題について簡単に説明します

目次1. Angular 2 アプリケーションのライフサイクル フックとは何ですか? 2. Angu...