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 5.7 のインストールと設定のチュートリアル

この記事では、参考までにMySQLのインストールと設定のチュートリアルを紹介します。具体的な内容は次...

Dockerコンテナが起動直後に終了する問題を解決する

最近、Docker がコンテナの起動時に特定のプロセスを直接実行できるようにする方法を調べていたとこ...

CSS パフォーマンスの最適化 - will-change の使用方法の詳細な説明

will-change は、要素にどのような変更が行われるかをブラウザに伝え、ブラウザが事前に最適化...

Dockerfile を使用して Node.js サービスをデプロイする方法

Dockerfileを初期化するプロジェクトの名前が express であると仮定して、expres...

CentOS8でのDockerの使い方の詳しい説明

1. CentOS8でのDockerのインストール カール https://download.doc...

MySQL 5.7.17 のインストールと設定のグラフィックチュートリアル

MySQL の機能: MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレー...

Centos7でのMySQLインストールチュートリアル

MySQLインストールチュートリアル、参考までに具体的な内容は次のとおりです。 1. ダウンロードY...

Vueライフサイクルカメラの8つのフック関数

目次1. beforeCreateとcreated関数2. beforeMountとmount関数3...

Google ブラウザのラベルと入力間のスペースに関する小さな問題

最初にコード、次にテキストコードをコピーコードは次のとおりです。 <!DOCTYPE html...

Node.js の非同期ジェネレータと非同期反復の詳細な説明

序文ジェネレーター関数は、async/await が導入される前から JavaScript に存在し...

MySQL で削除されたレコードが有効にならない理由のトラブルシューティング

オンライン MySQL トランザクションの問題の記録先週の金曜日、大きなテーブルを削除する操作を実行...

hasLayout によって発生する CSS バグの一覧

IE には長い間問題がありました。誰もがテストを受けたとき、誰もが笑顔でしたが、それはただのニヤニヤ...

HTML タイトル属性をラップする方法

数日前にプログラムを書いていたとき、プロンプト情報 (TITLE) を新しい行で囲みたいと思いました...

CSS フレキシブルレイアウト FLEX、メディアクエリ、モバイルクリックイベントの実装

フレックスレイアウト定義: Flexレイアウトの要素は、 Flex 、または略して「コンテナー」と呼...

Vue イベントの $event パラメータ = イベント値の場合

テンプレート <el-table :data="データリスト"> &...