Dockerで複数のSpringbootを実行するための詳細なチュートリアル

Dockerで複数のSpringbootを実行するための詳細なチュートリアル

Dockerは複数のSpringbootを実行する

1番目: ポートマッピング 2番目: メモリサイズの指定 3番目: 物理ファイルの読み取りと書き込み 4番目: ログファイル 5番目: 複数のコンテナの内部ネットワークアクセス 6番目: 発生した問題

1: ポートマッピング

Nginx は転送を使用するため、これが最も簡単です。

[hn@iZbp1gp1t778obaz5m8vk8Z ガイド]$ docker run -d -p 8093:8093 ガイド収集
 
物理ポートを仮想ポートにマップするだけです。これは非常に簡単です。

2番目: メモリサイズを指定する

-m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g のいずれかです。最低4M
--memory-swap メモリの合計制限 + スワップ パーティション サイズ。上記と同じ形式です。 -m --memory-reservation メモリ制限によって設定されたソフト制限よりも大きくする必要があります。上記と同じ形式 --oom-kill-disable OOM キラーがコンテナを強制終了するのを防ぐかどうか。デフォルトでは設定されていません --oom-score-adj OOM キラーによって強制終了されるコンテナの優先度。範囲は [-1000, 1000]、デフォルトは 0 です
--memory-swappiness は、コンテナの仮想メモリ制御動作を設定するために使用されます。値は 0 から 100 までの整数です。 --kernel-memory カーネル メモリの制限。上記と同じ形式、最小サイズは4M
例:
 
[hn@iZbp1gp1t778obaz5m8vk8Z ガイド]$ docker run -d -m 1G --memory-swap 4G -p 8093:8093 ガイド収集

3番目: 物理ファイルの読み取りと物理ファイルの書き込み

上記 2 つの状況は起動時に読み込まれますが、実行中にローカル ファイルを継続的に読み取る必要がある場合はどうすればよいでしょうか。

[hn-docker@iZbp1gp1t778obaz5m8vk8Z ~]$ docker run -d -m 1G --memory-swap 4G -p 8092:8092 \
-v /home/hn-docker/docker/wechat:/springboot/wechat \
ガイドメッセージ
 
メッセージコンテナの起動は、イメージ内のファイルアドレスを物理マシン上のアドレスにマッピングすることと同じです。たとえば、イメージアドレスは次のようになります: /springboot/wechat
物理アドレス: /home/hn-docker/docker/wechat

バインドマウント

バインド マウント モードはボリュームと非常によく似ています。違いは、バインド マウント モードではホスト上の任意のファイルまたはフォルダーがコンテナーにマウントされるのに対し、ボリュームでは基本的に Docker サービスによって管理される領域 (デフォルトは /var/lib/docker/volumes の下のフォルダー) がコンテナーにマウントされる点です。

バインドマウントの使用方法はボリュームの使用方法と似ており、ホストファイルは-vまたは--mountパラメータを通じてコン​​テナーにマウントされます。次に例を示します。

--mountパラメータを使用する場合は、 type=bindを指定する必要があります。

$ docker run -d \
 --name=nginxtest \
 --mount type=bind、source=/usr/local/web、destination=/usr/share/nginx/html \ マウントタイプ=bind、source=/usr/local/web、destination=/usr/share/nginx/html \
 nginx:最新

上記の例では、ホスト上の /usr/local/web フォルダーをコンテナー内の /usr/share/nginx/html フォルダーにマウントします。

または-vパラメータを使用します:

$ docker run -d \
 --name=nginxtest \
 -v /usr/local/web:/usr/share/nginx/html \
 nginx:最新

詳細については、Docker データストレージのバインドマウントの詳細な説明を参照してください。

4番目: ログファイル

ステップ 1: 実行中のコンテナの ID を取得します: da3199e9d032    
 
[hn@iZbp1gp1t778obaz5m8vk8Z ガイド]$ docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
da3199e9d032 guides-collect "java -Djava.secur..." 2 時間前 2 時間前 0.0.0.0:8093->8093/tcp sharp_mirzakhani
 
ステップ 2: 実行中のログをクエリする - 完了 [hn@iZbp1gp1t778obaz5m8vk8Z ガイド]$ docker logs -f 51c384b8afee

参考情報:

コマンド形式:

$ docker logs [オプション] コンテナ
 オプション:
    --details 詳細情報を表示 -f, --follow リアルタイムログを追跡 --since string 特定のタイムスタンプまたは相対時間(42m(つまり42分)など)以降のログを表示します
    --tail string ログの末尾から何行表示するかを指定します。デフォルトはすべてです。
  -t, --timestamps タイムスタンプを表示する --until string 特定のタイムスタンプ、または 42m (つまり 42 分) などの相対時間より前のログを表示する

例:

指定した時間後のログを表示し、最後の 100 行のみを表示します。

$ docker logs -f -t --since="2018-02-08" --tail=100 コンテナID

過去 30 分間のログを表示します。

$ docker logs --since 30m CONTAINER_ID

一定時間後にログを表示します。

$ docker logs -t --since="2018-02-08T13:23:37" コンテナID

一定期間のログを表示します。

$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" コンテナID

5番目: ホストとコンテナのネットワーク相互作用

問題の説明: Docker で実行されている springboot がホストの Redis にアクセスして他のコンテナの MySQL を取得しようとすると、困惑しますか?

解決策: ホスト コンテナのソフト接続 IP を照会し、イントラネット IP を使用してアクセスする必要があります。docker examine -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' xxxid (コンテナ ID)
 
例えば:
[yn@iZbp1gp1t778obaz5m8vk8Z ログ]$ docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
abe77b60254a アシスタント "java -Djava.secur..." 6 分前 6 分前にアップ 0.0.0.0:9304->8091/tcp nostalgic_albattani
37c6dd777636 collect "java -Djava.secur..." 30 時間前 30 時間前 0.0.0.0:8093->8093/tcp silly_poincare
4dcb9fcae281 メッセージ「java -Djava.secur...」 3 日前 3 日前 0.0.0.0:8092->8092/tcp reverent_galileo
 
たとえば、次のことを確認するには: abe77b60254a このコンテナのネットワークアドレス [yn@iZbp1gp1t778obaz5m8vk8Z logs]$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' abe77b60254a
172.17.0.4
 
現時点では:
abe77b60254a コンテナの IP アドレスは 172.17.0.4 です。
アクセスしたい場合は、イントラネットアドレス172.17.0.4を使用します。同時に、ホストマシンのIPは172.17.0.1である必要があることもわかります。

6番目: 遭遇する落とし穴

1: ミラーの起動に失敗した場合、ログの表示方法

起動に失敗した後、どのイメージIDであるかを確認し、ログを使用して確認する必要があります: docker logs -f image id

例えば:
[yn@iZbp1gp1t778obaz5m8vk8Z ログ]$ docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
abe77b60254a アシスタント "java -Djava.secur..." 6 分前 6 分前にアップ 0.0.0.0:9304->8091/tcp nostalgic_albattani
37c6dd777636 collect "java -Djava.secur..." 30 時間前 30 時間前 0.0.0.0:8093->8093/tcp silly_poincare
4dcb9fcae281 メッセージ「java -Djava.secur...」 3 日前 3 日前 0.0.0.0:8092->8092/tcp reverent_galileo
 
このコンテナログの最新の10行を確認します [yn@iZbp1gp1t778obaz5m8vk8Z ~]$ docker logs -f -t --tail 10 abe77b60254a

2. データベースに保存されたログ時間またはデータは、実際の時間より8時間短い

/bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime を実行し、 echo 'Asia/Shanghai' >/etc/timezone を実行します。 

これで、Docker で複数の Springboot を実行する詳細なチュートリアルに関するこの記事は終了です。Docker で複数の Springboot を実行する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • SpringBoot プロジェクトの Docker 環境を実行するときに発生する無限再起動問題の詳細な説明
  • DockerでSpringbootプロジェクトを実行する方法
  • Docker で Springboot プロジェクトを実行する実装

<<:  Linux に mysql をインストールするときに /etc に my.cnf ファイルがない問題を解決する

>>:  webpackでCSSを分割・圧縮し、リンクでインポートする手順

推薦する

CSS セレクタのグループ化の簡単な分析

セレクタのグループ化h2 要素と段落の両方を灰色にしたいとします。これを行う最も簡単な方法は、次のス...

Docker Machineの詳細な説明

Docker と Docker Machine の違いDocker はクライアント サーバー アーキ...

Vue はユーザーのログイン状態を維持します (さまざまなトークン保存方法)

目次クッキーの設定方法クッキーのデメリット: LocalStorage と SessionStora...

JavaScript ES 新機能ブロックスコープ

目次1. ブロックスコープとは何ですか? 2. ブロックスコープが必要なのはなぜですか? 3. 関数...

Vue Element フロントエンドアプリケーション開発 従来の Element インターフェースコンポーネント

目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...

MySQL 外部キー制約とテーブル関係の概要

目次外部キーテーブルの関係を決定する方法テーブル関係を作成する方法1対多の関係 - 従業員テーブルと...

Linux でファイルを削除するときに「操作は許可されていません」というプロンプトが表示される場合の対処方法

同僚からよく聞かれるのですが、ファイル/ディレクトリを削除すると「操作は許可されていません」というエ...

Layuiはログインインターフェース検証コードを実装します

この記事の例では、ログインインターフェース検証コードを実装するためのlayuiの具体的なコードを参考...

dockerでデプロイされたjenkinsでgitプログラムを実行する際の問題について

1. まず、gitを関連付けるときにエラーメッセージが報告されます: エラー: ビルドするリビジョン...

mysql ステートメントを使用してユーザー権限を照会するプロセスの詳細な説明

MySQL では、ユーザーに付与された権限をどのように確認しますか? ユーザーに付与される権限は、グ...

mysql5.7のインストールとNavicateの長期無料利用の実施手順

(I) mysql5.7のインストール: ❀詳細:無料のグリーンバージョン5.7のインストール方法は...

JS、CSS スタイルのリファレンスの記述

CS: ... 1. <link type="text/css" href...

Vue.js での VNode の使用

VNodeとはvue.js には VNode クラスがあり、これを使用してさまざまな種類の vnod...

MYSQL ストアドプロシージャと関数の簡単な記述

ストアドプロシージャとは簡単に言えば、これは強力で、JAVA 言語のメソッドに似た比較的複雑な論理関...

TCP 3 回目のハンドシェイク データ転送プロセス図

RFC793 ドキュメントの SYN フラグを持つプロセス パケットはデータを伝送できません。つま...