Spring環境を構成するためのDocker-composeの手順

Spring環境を構成するためのDocker-composeの手順

最近、メンバーがテストできるようにプロジェクトをパッケージ化する必要がありますが、パッケージ化された操作は開発に影響を与えます。そのため、 dockerを使用して本番環境をシミュレートし、パッケージ化されたプロジェクトを実行して、開発とメンバーのテストを同時に行う予定です。

元のプロジェクトが大きすぎたため、大規模なソフトウェア エンジニアリング実験で試してみることにしました。大規模なソフトウェア エンジニアリング実験では、 spring-boot,redis,mysql,angular,nginx環境を使用しました。まずspring-boot,redis,mysqldockerビルドをバックグラウンドで試しました。

docker-compose

composeプロジェクトは、Docker コンテナ クラスターの迅速なオーケストレーションを実現することを目的とした、Docker の公式オープン ソース プロジェクトです。 compose 、複数の Docker コンテナを定義して実行するアプリケーションです。

アプリケーション コンテナはDockerfileテンプレート ファイルを使用して作成できることは誰もが知っていますが、通常、プロジェクトでは、 jdk8redismysqlなどのアプリケーションを同時に必要とする私のバックエンドのように、複数のアプリケーション コンテナが必要になります。 docker-composeまさにこのニーズを満たします。これにより、ユーザーは単一のdocker-compose.ymlテンプレート ファイルを通じて、関連するアプリケーション コンテナーのグループをプロジェクトとして定義できるようになります。

composeにおける 2 つの重要な概念:

サービス: アプリケーションのコンテナ。実際には、同じイメージを実行する複数のコンテナ インスタンスを含めることができます。
プロジェクト: docker-compose.ymlファイルで定義された、関連するアプリケーション コンテナーのセットで構成される完全なビジネス ユニット。

サービスは必要なdockerコンテナであり、プロジェクトは多くのサービスで構成されています。 docker-compose理解したら、環境を構築できます。

spring-bootをビルドする

spring-bootをコンパイルするには、次の手順に従います。

  • jdk8イメージに基づく
  • spring-bootの下のmvnwとpom.xmlをコンテナにコピーし、Maven依存関係をインポートします。
  • srcディレクトリのソースコードをコンテナにコピーし、Mavenを使用してspring-bootプロジェクトをパッケージ化します。
  • jre8環境を使用してプロジェクトを実行する

Dockerfileをビルドします:

#### Spring-Bootプロジェクトをopenjdk:8-jdk-alpineからビルドします

# dockerコンテナ内のプロジェクト作業ディレクトリWORKDIR /appを設定します

# Maven 実行可能プログラムをコンテナーにコピーします COPY mvnw 。
コピー .mvn .mvn

# pom.xml ファイルをコピーします。COPY pom.xml 。

# すべての Maven 依存関係をインポートする RUN ./mvnw dependency:go-offline -B

# プロジェクトのソースコードをコピーします COPY src src

# アプリケーションをパッケージ化します RUN ./mvnw package -DskipTests
実行 mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

#### アプリケーションを実行できる最小の Docker コンテナを openjdk:8-jre-alpine から設定します

ARG 依存関係 = /app/target/dependency

# ビルドステージからプロジェクトの依存関係をコピーする
コピー --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
コピー --from=build ${DEPENDENCY}/META-INF /app/META-INF
コピー --from=build ${DEPENDENCY}/BOOT-INF/classes /app

エントリポイント ["java","-cp","app:app/lib/*","com.xiang.airTicket.AirTicketApplication"]

Docker-compose 統合プロジェクト サービス

spring-boot コンテナの構築が完了したら、 docker-composeを使用してspring-boot、redis、mysqlコンテナを統合できます。具体的なアイデア:

  • 申告事項
  • プロジェクトに統合する必要があるサービスを宣言する

docker-compose.ymlファイル:

バージョン: '3.7'

# サービスを定義する:
 # spring-boot サービス アプリ サーバー:
  建てる:
   context: . #docker-compose.yml を基準にして Dockerfile をビルドするためのパスを設定します
   dockerfile: Dockerファイル
  ポート:
   - "8080:8080" # ローカルポート8080をコンテナポート8080にマップする restart: always
  依存: 
   -db # 依存するサービスを最初に構築する必要があります - redis
  environment: #環境変数を設定します SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/airTicket?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
   SPRING_DATASOURCE_USERNAME: ルート
   SPRING_DATASOURCE_パスワード: 123456
   SPRING_REDIS.HOST: redis
  ネットワーク: # ネットワーク接続 mysql および redis
   - バックエンド
 デシベル:
  イメージ:mysql:5.6
  ポート:
   - 「3306:3306」
  再起動: 常に
  環境:
   MYSQL_DATABASE: 航空券
   MYSQL_USER: htx
   MYSQL_パスワード: 123456
   MYSQL_ルート_パスワード: 123456
  ボリューム:
   -dbデータ:/var/lib/mysql
  ネットワーク:
   - バックエンド
 レディス:
  画像: redis
  コマンド: [ "redis-server", "--protected-mode", "no" ]
  ホスト名:
   レディス
  ポート:
   - 「6379:6379」
  ネットワーク:
   - バックエンド   
ボリューム:
 dbデータ:
ネットワーク:
 バックエンド:

docker-compose buildを使用してプロジェクト コンテナをビルドします。


docker-compose upを使用してコンテナを起動します。


spring-boot の起動が成功したことを示すログが表示されたら、正常に構成されています。

フォローアップ

今回はバックエンドのみ構築しました。フロントエンドのangular、nginxも構築し、 dockerコマンドで直接アプリケーションを起動してみたいと思います。

参考リンク: Spring Boot、Mysql、React docker compose の例

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker Compose 構成ファイルの記述とコマンドの使用例
  • Docker Compose を使用して ElasticSearch 構成プロセスを構築およびデプロイする
  • Docker-compose インストール yml ファイルの設定方法
  • docker compose を使ってワンクリックで分散構成センター Apollo を展開するプロセスの詳細な説明
  • Jenkins の docker-compose デプロイメントと構成に関する詳細なチュートリアル
  • Docker.v19 で Docker Compose オーケストレーション ツールをインストールして構成する方法
  • Linux で docker-compose を使用したソフトウェア構成の詳細な説明
  • Docker Compose 構成ファイルパラメータの詳細な説明

<<:  Vueはページを更新するために3つの方法を使用する

>>:  MySQL マスタースレーブ同期遅延の原因と解決策

推薦する

MySQLのワークベンチ例の詳細な説明

MySQL Workbench - モデリングおよび設計ツール1. モデルは、最も効果的で高性能なデ...

Windows 10 でカスタムドメイン名をバインドするように Hexo と GitHub を構成する方法

Hexo は Windows 10 でカスタムドメイン名を GitHub にバインドしますまずドメイ...

docker run 起動パラメータ コマンドを表示する方法 (推奨)

runlike を使用してコンテナの docker run 起動パラメータを表示します。 pipを...

MySQL タイムブラインドインジェクションの 5 つの遅延方法

MySQL タイム ブラインド インジェクションの 5 つの遅延方法 (PWNHUB の予期しない解...

React で複数の setStates が何回呼び出されるのでしょうか?

目次1. 2 つの setState を何回呼び出すのですか? 2. 2 つの setState の...

JavaScript のプロトタイプとプロトタイプチェーンの詳細な説明

目次プロトタイプチェーン図プロトタイピングに必須の知識プロトタイププロパティ(プロトタイプを表示) ...

HTML のテキストエリア タグ

<textarea></textarea> は、複数行を入力できるテキスト ...

HTML におけるブロックコメントの使用に関する詳細な紹介

HTML の一般的なコメント: <!--XXXXXXXX--> (XXXXXXXX はコ...

Saltstack に Zabbix サービスをデプロイする方法を説明します

目次SaltstackがZabbixサービスを導入httpd、mysql、phpをインストールするh...

ジョセフリング問題を解決する 3 つの JavaScript メソッド

目次概要問題の説明循環リンクリスト順序付き配列数学的再帰要約する概要ジョセフ・リング問題は、ジョセフ...

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント。ウェブサイトのアクセス速度...

display または visibility を通じて HTML 要素を表示または非表示にする

場合によっては、特定の条件に基づいて Web ページ内の HTML 要素を表示するか非表示にするかを...

HTMLの基礎: HTMLの基本構造

HTML ハイパーテキスト ドキュメントの基本構造は、ドキュメント ヘッダーとドキュメント本体の 2...

Javascriptジェネレータの紹介と使用

ジェネレータとは何ですか?ジェネレーターは関数内で実行されるコードです。値を返した後、一時停止し、呼...

MySQL データベースを手動および自動でバックアップする 8 つの方法

MySQL は人気のオープンソースデータベース管理システムとして多くのユーザーが利用しています。デー...