ホームページ  >  記事  >  Java  >  Docker が SpringBoot をデプロイし、jar パッケージを置き換える方法

Docker が SpringBoot をデプロイし、jar パッケージを置き換える方法

PHPz
PHPz転載
2023-05-12 14:16:142242ブラウズ

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

Docker が SpringBoot をデプロイし、jar パッケージを置き換える方法

dockerfile ファイル

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

ファイルのデプロイメント

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

Docker が SpringBoot をデプロイし、jar パッケージを置き換える方法

イメージの生成

docker build -t hellolearn .

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

Docker が SpringBoot をデプロイし、jar パッケージを置き換える方法

コンテナの開始

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

docker start hellolearn

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

Access web

Docker が SpringBoot をデプロイし、jar パッケージを置き換える方法

#jar パッケージ マッピングのデプロイメント

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

5.1 dockerfile を更新します

最終行 エントリポイント ["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 の作成

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 ファイル ディレクトリ構造図

Docker が SpringBoot をデプロイし、jar パッケージを置き換える方法

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

6.6 イメージの作成

docker build -t hellolearn-script .

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

6.7 コンテナーの作成と開始

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

docker start hellolearn-script

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

6.8 Web テストの効果

Docker が SpringBoot をデプロイし、jar パッケージを置き換える方法

##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" -- "2020-10-01t19:00:00" コンテナ ID

7.3 指定した時間以降のログを表示します:

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

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

#docker logs --since 5mcontainer id

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

docker exec hellolearn -it /bin/bash

または

docker exec -it hellolearn bash

7.6 docker ip

docker Inspection --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: nochain/target/match by that name.

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

systemctl 再起動ドッカー

以上がDocker が SpringBoot をデプロイし、jar パッケージを置き換える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。