重要な注意: この記事を読む前に、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はマーキースタイルのテキストの水平スクロールを実装します
Text の height 属性が定義されている場合、Text に入力されたテキストは垂直方向に中央...
まずJDKをダウンロードします。ここではjdk-8u181-linux-x64.tar.gzを使用し...
序文私は less/sass を書くことに慣れていますが、小さなプログラムを開発するときには、まだ ...
I. はじめにまず、MySQL のバージョンについて説明します。 mysql> バージョンを選...
目次1. 応答原理の基盤2. コアオブジェクト: Dep と Watcher 3. 依存関係を収集し...
ディスク領域の管理は、システム管理者にとって重要な日常的なタスクです。ディスク領域が使い果たされると...
質問:オリジン サーバーはターゲット リソースの表現を見つけることができないか、既存の表現を公開した...
最近、goaccess を使って nginx ログを分析したいのですが、nginx ログの設定形式が...
elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...
序文現在、私はコースウェア PPT のオンライン プレビューを必要とする高品質のコースに取り組んでい...
注: データベースのバージョンの問題により、プロジェクトの起動時にエラーは発生しませんでしたが、デー...
目次基本的なセレクター:レベルセレクター:属性セレクター:フィルターセレクター:フォーム属性セレクタ...
序文:多くのビジネス テーブルでは、歴史的またはパフォーマンス上の理由により、最初のパラダイムに違反...
完全なコードは次のとおりです。 HTMLコード:コードをコピーコードは次のとおりです。 <!-...
1.タイムアウトを設定する3 秒後に abc を印刷します。一度だけ実行します。 setTimeou...