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ページ作成に関する私の経験の簡単な要約

Word of Mouth に入社して 3 ~ 4 か月が経ちました。仕事の中で一番の収穫は、ビジュ...

MySQLデータベース設計:Pythonを使ったスキーマ操作方法の詳しい解説

矢が放たれる前に、弓は矢にささやきました。「お前の自由は私のものだ。」スキーマは矢のようなもので、弓...

CSS 配送先住所平行四辺形線スタイルの例コード

コードは次のようになります。 // 配送先住所の平行四辺形の線のスタイル <view clas...

MySQL 5.7 で my.ini ファイルが見つからない場合の解決策

my.ini とは何ですか? my.ini は、MySQL データベースで使用される設定ファイルです...

DockerでLNMPアーキテクチャを展開する方法

環境要件: IPホスト名192.168.1.1ノード1プロジェクト計画:コンテナネットワークセグメン...

CentOS 6.6 ソースコードのコンパイルと MySQL 5.7.18 のインストールチュートリアルの詳細な説明

1. ユーザーとグループを追加する1. mysqlユーザーグループを追加する # グループ追加mys...

MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明

遅いクエリをチェックすると、時間が正しくなく、システム時間とちょうど 8 時間異なっていることがわか...

VMware Workstation16 と Navicat リモート接続での Centos7 での MySQL8.0 インストール プロセス

目次1. CentOS7+MySQL8.0、yumソースインストール2. MySQLにログインしてパ...

docker コマンド例外「権限が拒否されました」の解決方法

Linuxシステムでは、dockerを新しくインストールし、次のようなコマンドを入力します。dock...

JavaScriptタイマーとボタン効果設定の詳細な説明

タイマー効果: <div> <font id='timeCount'...

Linux システムでの Selenium クローラー プログラムの導入の概要

目次序文1. セレンとは何ですか? 2. 使用手順1. ライブラリをインポートする2. テストコード...

React refの使用例

目次refとは何かrefの使い方DOM要素に配置するクラスコンポーネントに配置する関数コンポーネント...

MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

いくつかの記事を読んだ後、ようやく MySQL で row_number() ソートを実装する方法が...

インタビュアーはCSSで固定アスペクト比を実現する方法を尋ねました

この質問に関連するニーズはまだないかもしれませんし、面接でこの質問をされたことがないかもしれませんが...

MySQLの比較演算子正規表現マッチングREGEXPの使用の詳細な説明

1. データを初期化する `test_01` が存在する場合はテーブルを削除します。 テーブル「te...