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 マスタースレーブ同期遅延の原因と解決策

推薦する

Nodejs のグローバル変数とグローバルオブジェクトの知識ポイントと使用方法の詳細

1. グローバルオブジェクトすべてのモジュールは呼び出すことができます1) global: ブラウザ...

HTML 適応テーブル方式

<body style="scroll:no"> <テーブルの...

ユーザーのニーズがマーケティング指向のデザインにつながる

<br />それぞれのトピックについて、チーム内でメールで議論します。議論が白熱するにつ...

HTML初心者や初級者向けの提案。専門家は無視してかまいません。

感想:私はバックエンド開発者です。静的 (HTML) ページを取得すると、ページ構造と命名規則が極端...

IdeaはリモートDockerをデプロイし、ファイルを構成する

1. LinuxサーバーのDocker構成ファイルを変更する vim /usr/lib/system...

Vue3 Vue CLI マルチ環境設定

目次1. はじめに2. 切り替え1. 開発および本番環境の設定ファイルを追加する2. 複数の環境をサ...

MacOS での MySQL 8.0.18 のインストールと設定方法のグラフィック チュートリアル

この記事では、MacOSでのMySQL 8.0.18のインストールと成功したコマンドライン操作を記録...

Vueはカスタムツリーコンポーネントを再帰的に実装します

この記事では、カスタムツリーコンポーネントを再帰的に実装するVueの具体的なコードを参考までに共有し...

MySQLのREDOログとUNDOログの詳細な説明

MySQL ログ システムで最も重要なログは、REDO ログとアーカイブ ログです。後者は MySQ...

NodeとPythonの双方向通信実装コード

目次プロセスコミュニケーションプロセス間の双方向通信問題要約するサードパーティのデータ サプライヤー...

RedHat 6.5/CentOS 6.5 に MySQL 5.7.20 をインストールするための詳細なチュートリアル

rpmインストールパッケージをダウンロードするMySQL公式サイト: https://dev.mys...

SQL ROW_NUMBER() および OVER() メソッドのケーススタディ

構文フォーマット: row_number() over(partition by grouping ...

bashコマンドの使い方の詳細な説明

Linux では、基本的に vi エディタのように「.sh」拡張子を持つテキストの処理と実行を記述す...

Linuxパフォーマンス監視コマンドの簡単な紹介

システムでさまざまな IO ボトルネック、メモリ使用量の増加、CPU 使用率の増加などの問題が発生し...

Vue フロントエンドと Django バックエンドを使用して、一定期間内のデータをクエリする方法

序文開発プロセスでは、すべてのデータではなく特定の期間内のデータをクエリするなど、クエリのフィルタリ...