後で使用する dockerfile ファイルを作成します。
サーバー上に新しい /data/docker/hellolearn フォルダーを作成し (ファイル パスはカスタマイズ可能)、Maven でパッケージ化された jar パッケージと上で作成した dockerfile ファイルを次の場所にコピーします。サーバー 新しいフォルダー (/data/docker/hellolearn) を作成します。
docker build -t hellolearn .
docker build -t イメージ名: label dockerfile相対位置。ドットは現在のディレクトリを表します。タグが書き込まれていない場合のデフォルトは、latest です。
docker run -d -p 8301:8301 --name hellolearn hellolearn
docker start hellolearn
-d パラメーターを使用すると、コンテナーをバックグラウンドで実行できます。--name は指定したコンテナーの名前です。-p はポート マッピング用です。このとき、8301 (コロンの前のポート) ) サーバーのポートはコンテナにマッピングされます 8301 (コロンの後のポート) ポート (application.properties は 8301 で構成されます)
上記の手順に従うだけで、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 ファイル ディレクトリ構造図
#ここでのディレクトリ構造について混乱しているかどうかはわかりませんが、私のディレクトリ構造図をアップロードします。ホストマシンが一目でわかるように。
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 ログの表示docker ログ [オプション] コンテナー IDオプションの説明:
-f: トレース ログ出力7.1 指定した時間以降のログを表示し、最後の 100 行のみを表示します:--since: 特定の開始時刻のすべてのログを表示
-t: タイムスタンプを表示
-- tail:最新の n 個のコンテナー ログのみを一覧表示します
docker logs -f -t --since ="2020-10-01" --tail=100 コンテナ ID7.2 指定した期間のログを確認します
docker logs -t --since = "2020-10-01t19:00:00" -- "2020-10-01t19:00:00" コンテナ ID7.3 指定した時間以降のログを表示します:
#docker logs -t --since="2020-10-01t19:00:00" コンテナー ID
#docker logs --since 5mcontainer id7.4 過去 5 分間のログを表示します:
7.5 exec コマンドを使用して指定されたコンテナ上で bash を実行します:docker exec hellolearn -it /bin/bash
または
docker exec -it hellolearn bash7.6 docker ip
発生した問題問題の説明: デーモンからのエラー応答: ドライバーがエンドポイント 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 が SpringBoot をデプロイし、jar パッケージを置き換える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。