ここ数日、dockerでSpring Bootアプリケーションを実行する方法を勉強してきました。以前は、src/mainにdockerフォルダと新しいDockerfileファイルを直接作成できるMavenプラグインがありました。コンパイルしてパッケージ化した後、dockerプラグインを直接実行できます。これは、 そのため、後で Spring Boot アプリケーションをミラーにビルドするときに、提供されている docker maven プラグインは使用せず、現在のプロジェクトのルート ディレクトリに新しい Dockerfile ファイルを作成しました。アプリケーションが記述された後、次のようにコマンドを手動で実行して、アプリケーションをミラーにビルドしました。 Springbootアプリケーション ドキュメント ここでの pom.xml では、次のように複数のリポジトリを指定し、複数のプラグインを提供する必要があります。 <プロジェクト xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <モデルバージョン>4.0.0</モデルバージョン> <groupId>cn.com</groupId> <artifactId>springbootweb</artifactId> <バージョン>1.0-SNAPSHOT</バージョン> <packaging>jar</packaging> <name>spring :: boot :: web</name> <親> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <バージョン>1.4.1.RELEASE</バージョン> <相対パス/> </親> <プロパティ> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <docker.image.prefix>springio</docker.image.prefix> 0.3.8 をリリースしました。 <java.version>1.8</java.version> </プロパティ> <依存関係> <依存関係> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </依存関係> </依存関係> <リポジトリ> <リポジトリ> <id>春のスナップショット</id> <url>http://repo.spring.io/snapshot</url> <スナップショット> <enabled>有効</enabled> </スナップショット> </リポジトリ> <リポジトリ> <id>春の節目</id> <url>http://repo.spring.io/milestone</url> <スナップショット> <enabled>有効</enabled> </スナップショット> </リポジトリ> </リポジトリ> <プラグインリポジトリ> <プラグインリポジトリ> <id>春のスナップショット</id> <url>http://repo.spring.io/snapshot</url> </プラグインリポジトリ> <プラグインリポジトリ> <id>春の節目</id> <url>http://repo.spring.io/milestone</url> </プラグインリポジトリ> </プラグインリポジトリ> <ビルド> <プラグイン> <プラグイン> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <バージョン>3.2</バージョン> <構成> <compilerArgument>-パラメータ</compilerArgument> <ソース>1.8</ソース> <target>1.8</target> <encoding>UTF-8</encoding> </構成> </プラグイン> <プラグイン> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <バージョン>2.18.1</バージョン> <構成> <skipTests> 真</skipTests> </構成> </プラグイン> <プラグイン> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <バージョン>2.6</バージョン> <構成> <encoding>UTF-8</encoding> </構成> </プラグイン> <プラグイン> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--<バージョン>${spring.boot.version}</バージョン>--> <構成> <mainClass>cn.com.SpringBootWebアプリケーション</mainClass> <layout>郵便番号</layout> </構成> <処刑> <実行> <目標> <目標> 再パッケージ </目標> </目標> </実行> </処刑> </プラグイン> </プラグイン> </ビルド> <プロフィール> <プロフィール> <id>JDK1.8</id> <アクティベーション> <activeByDefault> 真</activeByDefault> </アクティベーション> <プロパティ> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <encoding>UTF-8</encoding> </プロパティ> </プロフィール> </プロフィール> </プロジェクト> ここでは、いくつかのウェアハウス アドレスが提供されています。その理由は、この記事で Springboot アプリケーションを Docker に入れるときに、ソース コードを直接入れ、コンパイルしてパッケージ化して実行するためです。jar パッケージをダウンロードするためにウェアハウス アドレスが提供されていない場合、依存関係は中央ウェアハウスからプルされますが、これは非常に遅くなり、プル タイムアウトが発生し、アプリケーションが使用できなくなります。そのため、依存関係をダウンロードするために、他のいくつかのウェアハウス アドレスが提供されています。また、ここにはプラグインがあります。このプラグインを使用すると、mvn spring-boot:run の形式でアプリケーションを直接実行できるため、java -jar xxx.jar を使用してアプリケーションを実行することはしませんでした。 アプリケーションとコントローラー この SpringBoot アプリケーションは非常にシンプルで、次のように Hello World に似たインターフェースを備えたシンプルなコントローラーを提供します。 パッケージ cn.com.controllers; org.springframework.web.bind.annotation.RequestMapping をインポートします。 org.springframework.web.bind.annotation.RestController をインポートします。 java.util.HashMap をインポートします。 java.util.Map をインポートします。 /** * xiaxuan によって 16/11/27 に作成されました。 */ @レストコントローラ パブリッククラス IndexController { @RequestMapping(値 = "/index", 結果 = "application/json;charset=utf-8") パブリックオブジェクトインデックス() { Map<String, Object> 結果 = 新しい HashMap<String, Object>(); result.put("msg", "hello world"); 結果を返します。 } } シンプルなhelloworldメソッドを提供します。 以下はアプリケーションの起動クラスです。 パッケージcn.com; org.springframework.boot.SpringApplication をインポートします。 org.springframework.boot.autoconfigure.SpringBootApplication をインポートします。 /** * xiaxuan によって 16/11/27 に作成されました。 */ @SpringBootアプリケーション パブリッククラスSpringBootWebApplication { パブリック静的voidメイン(String[] args) { SpringApplication.run(SpringBootWebApplication.class、引数); } } 通常の Spring Boot の起動では、非常に簡単です。SpringBootWebApplication 起動クラスを起動するだけです。ただし、Docker コンテナで実行すると、それほど簡単ではありません。以下の Dockerfile ファイルをご覧ください。 Dockerファイル Dockerfile ファイルも次のように比較的シンプルです。 # ベースイメージ java:8より # メンテナー メンテナー bingwenwuhen [email protected] # パッケージを更新し、Maven をインストールします 走る \ エクスポート DEBIAN_FRONTEND=非対話型 && \ sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \ apt-get update && \ apt-get -y アップグレード && \ apt-get install -y vim wget curl maven # ボリュームをアタッチする 巻 /vol/開発 # 作業ディレクトリを作成 mkdir -p /vol/development を実行します。 mkdir -p /vol/development/src を実行します。 ワークディレクトリ /vol/development コピー ./src /vol/development/src/ コピー ./pom.xml /vol/development/ # maven 実行 CMD ["mvn", "clean", "install", "spring-boot:run"] dockerfile は java8 をベースイメージとして使用し、ベースイメージに Maven を別途インストールする必要があります。dockerfile ファイルでは、ソースコード全体がイメージに入力され、ここでは生成された jar のみがイメージに入力されないためです。したがって、これは、pom.xml でウェアハウスを指定する必要があることを前に述べたことです。ウェアハウスが指定されていない場合、イメージ内の依存関係をプルするときに、依存関係は中央ウェアハウスからプルされるため、非常に遅くなります。以前に何度か試しましたが、基本的なプルプロセスがタイムアウトして失敗したため、ここでウェアハウスを指定して依存関係をプルします。 イメージを構築する 次に、ディレクトリ内でコマンド ミラーリング後、実行 次に、 コンテナが実行中です。 リクエストインターフェース インターフェースを要求する前に、Docker 仮想マシンの IP アドレスを確認する必要があります。このマシンの IP アドレスは 192.168.99.100 です。インターフェースを要求するコマンドは次のとおりです。 カール http://192.168.99.100:8080/index 応答は次のとおりです。 { "メッセージ":"こんにちは世界" } リクエストは成功しました。Springboot アプリケーションは Docker で正常に実行されました。 質問
ソースコード ソースコードをgithubにアップロードしましたので、必要な場合はダウンロードできます。 ソースコードのダウンロード 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: Spark RDD をデータフレームに変換し、それを MySQL に書き込む例
目次1. 結論から始めましょう2. キーの役割2.1 例2.2 上記の例を修正する2.3 例を再度修...
目次K8Sマスター基本アーキテクチャポッドオーケストレーションコンセプトPod オブジェクトのプロパ...
導入MySQL InnoDB エンジンがレコードをクエリし、インデックス カバレッジを使用できない場...
ウェブサイトをデザインするにはインスピレーションが必要です。良いインスピレーションを得るには、より多...
1. Get はサーバーからデータを取得するために使用され、Post はサーバーにデータを渡すために...
目次導入スクロール要素.スクロール()要素.scrollHeight/scrollWidth要素.s...
目次序文1. 現在の時刻を取得する1.1 現在の日付と時刻を返す1.2 現在の日付を取得する1.3 ...
OBS studioかっこいいですが、 JavaScriptもっとかっこいいです。では、 JavaS...
最近、ウェブサイトを設計するときにこの問題に遭遇しています。メンバーセンターを設計し、コンテンツを ...
1. Dockerに適したRedisのバージョンを見つけるdocker hubで見つけることができ...
コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...
質問ガイド1. Hadoop 3.x はどのようにして障害を許容するのでしょうか? 2. Hadoo...
1. Nexusの設定1. Dockerプロキシを作成する外部ネットワーク ウェアハウスからローカル...
目次序文指導の基本フック機能フック関数のパラメータ文章使い方とアイデア成し遂げる汎用性を高める要約す...
では、GIF、PNG、JPG のどの形式を候補形式として選択すればよいのでしょうか。また、どの画像形...