重要な注意: この記事を読む前に、Docker コンテナに関する知識と、一般的な Docker 操作コマンドを理解して使いこなせる能力が必要です。すでに Docker コンテナに関する知識がある場合は、始めましょう。 タイトルで説明した機能を実行するための一般的な手順は次のとおりです。 Dockerイメージリポジトリを構築する Spring Boot 構成ファイルを変更して、Docker リポジトリ構成、パッケージを追加し、Docker イメージ リポジトリにアップロードします。 アップロードしたイメージファイルを自分のDockerイメージリポジトリから取得して実行します。 ステップ1: プライベートDockerイメージリポジトリを構築するDocker イメージ リポジトリを構築するには、docker-registry ツールを使用する必要があります。Docker-registry は、プライベート イメージ リポジトリを構築するために使用できる公式ツールです。この記事は公式の docker-registry v2.x バージョンに基づいています: https://docs.docker.com/registry/ 1. レジストリイメージファイルを取得する docker プルレジストリ 2. 画像を開始する $ docker run -d \ -p 5000:5000 \ -v /opt/data/registry:/var/lib/registry \ レジストリ -d: デーモンスレッドの開始 3. daemon.jsonファイルとウェアハウス設定を追加する :vim /etc/docker/daemon.json を実行します。 次の構成を追加します。 { 「レジストリミラー」: [ 「https://registry.docker-cn.com」 ]、 「安全でないレジストリ」: [ "yourip:5000" ] } 元のdaemon.jsonファイルにinsecure-registriesノード構成を追加します。 yourip: 仮想マシンのIPを入力し、保存して終了し、構成ファイルを再読み込みしてdockerを再起動します。 systemctlデーモンリロード systemctl dockerを再起動します 4. イメージを自分のイメージリポジトリにアップロードしてテストします。docker tag コマンドを使用してイメージにタグを付け、リポジトリにアップロードします: docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG] docker タグ ubuntu:latest 127.0.0.1:5000/ubuntu:latest (ここでテスト用にアップロードした画像は、記事のものと同じである必要はありません。Tomcatイメージを取得してアップロードすることもできます。)この時点でマークされた画像が生成されます。 dockerイメージls リポジトリ タグ イメージ ID 作成 仮想サイズ ubuntu 最新 ba5877dc9bec 6 週間前 192.7 MB 127.0.0.1:5000/ubuntu:latest 最新 ba5877dc9bec 6 週間前 192.7 MB プライベートリポジトリにプッシュ docker push 127.0.0.1:5000/ubuntu:最新 プライベートウェアハウスのイメージを表示します(実際にはウェアハウス起動時にマウントされたディレクトリに移動できます。この記事では、ホストマシンの /opt/data/registry ディレクトリにアップロードされたイメージファイルを表示できます) カール 127.0.0.1:5000/v2/_catalog プライベートリポジトリイメージをプルダウンする docker pull 127.0.0.1:5000/ubuntu:最新 プルに問題がなければ、ミラーリポジトリが構築されたことを意味します。 ステップ2 SpringBoot構成ファイルを変更して、Dockerリポジトリ構成、パッケージを追加し、Dockerイメージリポジトリにアップロードします。SpringBoot プロジェクトを構成する前に、jar パッケージをウェアハウスにアップロードするように Docker コンテナを構成する必要があります。 docker リモート API を開き、ファイルを変更します。 vim /lib/systemd/system/docker.service オリジナルの ExecStart: ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock **-H tcp://0.0.0.0:2375** を追加します。 変更後: ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock (Alibaba Cloud Server を使用している場合は、アクセス ルールでポート 2375 を開くことを忘れないでください) 保存して終了し、設定を再読み込みしてDockerを起動します。 systemctlデーモンリロード systemctl dockerを再起動します 設定が成功したかどうかを確認します。 docker -H 127.0.0.1 情報 次の出力は構成が成功したことを示します。
Springbootプロジェクトを設定し、次のようにパッケージ設定をpomファイルに追加します。 <プラグイン> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <バージョン>1.1.0</バージョン> <処刑> <実行> <id>ビルドイメージ</id> <phase>パッケージ</phase> <目標> <goal>ビルド</goal> </目標> </実行> </処刑> <構成> <イメージ名>jenkins_test/${project.artifactId}:${project.version}}</イメージ名> <dockerHost>http://yourip:2375</dockerHost> <baseImage>java:8</baseImage> <entryPoint>["java", "-jar","/${project.build.finalName}.jar"] </エントリポイント> <リソース> <リソース> <ターゲットパス>/</ターゲットパス> <ディレクトリ>${project.build.directory}</ディレクトリ> <include>${project.build.finalName}.jar</include> </リソース> </リソース> </構成> </プラグイン>
上記の内容を設定したら、パッケージ化できます(通常のspringboot mavenパッケージ化、またはidea mavenprojectインストール) パッケージ化が正常に完了したら、Dockerコンテナに戻ってイメージウェアハウスを確認します。 カール 127.0.0.1:5000/v2/_catalog 存在を確認したら、アップロードした画像をプルダウンし、プルが成功したら画像リストを確認します Docker イメージ 次のように表示します: これは、この一連の操作が成功したことを意味します。Docker は java:8 ベース イメージをプルする必要があるため、最初のパッケージ化は遅くなる可能性があります。 この画像から始めましょう。 docker run -p 8080:8080 イメージID -p: ポートマッピング 起動は以下のように成功します。 springboot プロジェクトの application.yml ファイルで設定されている server.port は 8080 であるため、起動時に 8080:8080 をマッピングする必要があります。最初の 8080 はホスト マシンのポートであり、2 番目の 8080 はコンテナーのポートです。 これまでのところ、この記事で実装する必要のあるものはすべて実装されています。イースターエッグをさらに知りたい場合は、読み続けてください。 ! ! ! springbootプロジェクトには次のようなログ設定があります <?xml バージョン="1.0" エンコーディング="UTF-8"?> <構成デバッグ="false"> <!-- ログ ファイルの保存アドレスを定義します。LogBack 構成では相対パスを使用しないでください。--> <プロパティ名="LOG_HOME" 値="/home/logs" /> <!-- コンソール出力 --> <アペンダー名="STDOUT" クラス="ch.qos.logback.core.ConsoleAppender"> <エンコーダークラス="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- フォーマットされた出力: %d は日付、%thread はスレッド名、%-5level: レベルは左から 5 文字分表示されます、%msg: ログ メッセージ、%n は改行です --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </エンコーダ> </アペンダー> <!-- 毎日ログファイルを生成します --> <アペンダー名="FILE" クラス="ch.qos.logback.core.rolling.RollingFileAppender"> <ローリングポリシークラス="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--ログファイル出力ファイル名--> <ファイル名パターン>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</ファイル名パターン> <!--ログファイルの保存日数--> <MaxHistory>30</MaxHistory> </ローリングポリシー> <エンコーダークラス="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- フォーマットされた出力: %d は日付、%thread はスレッド名、%-5level: レベルは左から 5 文字分表示されます、%msg: ログ メッセージ、%n は改行です --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </エンコーダ> <!--最大ログ ファイル サイズ--> <トリガーポリシークラス="ch.qos.logback.core.rolling.サイズベースのトリガーポリシー"> <最大ファイルサイズ>10MB</最大ファイルサイズ> </トリガーポリシー> </アペンダー> <!-- ログ出力レベル --> <ルートレベル="情報"> <アペンダー参照ref="STDOUT" /> <appender-ref ref="ファイル" /> </ルート> </構成> このノードに設定されたログファイルの保存アドレスに注意する必要があります。 従来の jar パッケージ展開方法に従うと、ログ ファイルはホスト マシンの /home/logs にあるはずです。しかし、そのようなディレクトリが存在しないことがわかりました。では、問題はどこにあるのでしょうか。ログファイルはどこに出力されますか? ?起動したSpringbootコンテナに入り、すでに実行中のコンテナに対話的に入ってみましょう。 docker exec -it コンテナID bash その中にホームディレクトリがあることがわかります。ディレクトリを一つずつ入っていけば、ログファイルがここにあることがわかります。 考えてみてください。以前、データ ボリューム コマンドを使用しませんでしたか? コンテナー内のパスを仮想マシンにマップできますか?ぜひお試しください!起動したコンテナを停止します(直接削除しましょう) docker stop コンテナID docker rm コンテナID コンテナを再起動する docker run -d -p 8080:8080 -v /home/logs:/home/logs イメージID 今回はコマンドに -d を追加しました。これはデーモンスレッドが開始されていることを意味します(バックグラウンドで実行中)。開始されたコンテナのログを表示するには、次のコマンドを使用します。 docker ログ -f コンテナID ご覧のとおり、起動は成功しているので、locback.xml がマッピングしたホストの /home/logs ディレクトリにログ ファイルを出力するのは当然です。確認して一連のコマンドを入力すると、ログ ファイルが実際にここにあることがわかります。 Spring Boot のパッケージ化と Docker リポジトリへのアップロードの詳細な手順については、これで終わりです。Spring Boot のパッケージ化とアップロードに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Vueはマーキースタイルのテキストの水平スクロールを実装します
この記事では、WebSocketを使用して簡単なチャットルームの会話を実装するための具体的なコードを...
この記事では、MySQL 8.0.16 Win10 zip版のインストールと設定のグラフィックチュー...
オフセットOffset はオフセットです。関連プロパティの offset シリーズを使用すると、次の...
コンテナが企業の IT インフラストラクチャに欠かせない要素となっていることは間違いありません。コン...
目次1. SQLインジェクションの概要2. SQLインジェクション攻撃の全体的な考え方SQLインジェ...
非常に大量のデータ(数百 GB)を計算する必要があったことはありますか?または、その内部を検索したり...
MYSQL 5.6 スレーブレプリケーションの展開と監視MYSQL 5.6 のインストールと展開 #...
1. PRIMARY KEY(主キーインデックス)を追加するmysql>ALTER TABLE...
目次1. Vue2 構文2. Vue3の使用1. コンポーネントのref値を設定する2. コンポーネ...
mysql 8.0.11 winx64のインストールチュートリアルは以下のように記録され、みんなと共...
[LeetCode] 181.従業員の収入が管理職よりも多い従業員テーブルには、マネージャーを含む...
拡張版です。質問とSQL文は以下の通りです。ユーザー テーブルを作成し、id、name、gender...
この記事では、RHEL8 のネットワーク サービスとネットワーク構成ツール、およびネットワーク ファ...
tortoiseGit のインストール時にいつも問題があったので、単純に svn に変更しました。途...
このチュートリアルでは、MySQL 5.7のインストールと設定方法を参考までに紹介します。具体的な内...