dockercompose を使用して springboot-mysql-nginx アプリケーションをビルドする

dockercompose を使用して springboot-mysql-nginx アプリケーションをビルドする

前回の記事では、Docker を使用して、コンパイルされた jar パッケージをイメージに組み込む Spring Boot アプリケーションを構築しました。

この記事では、Spring-Boot をデータベースとともに Docker サービスのセットとして実行します。

ここでは、自分の操作を記録しているだけです。実行コード全体については、「参考資料」の参考資料 1 の内容を参照してください。
(mysql マッピング ディレクトリを変更し、リモート IP メソッドを取得しました)

主な手順:

  • シンプルなSpringbootアプリケーションを構築する
  • アプリケーションにDockerサポートを追加する
  • Docker Compose 設定ファイルを書く
  • 練習操作

シンプルなSpringbootアプリケーションを構築する

サイトにアクセスする IP アドレスの数をカウントする Web アプリケーションを作成します。

そしてそれを MySQL データベースに保存します。ここでは、jpa を使用してデータベースにアクセスします。

頼る

<親>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <バージョン>2.0.0.RELEASE</バージョン>
</親>

web、jpa、mysql、tset ライブラリの依存関係

<依存関係>
  <依存関係>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </依存関係>
  <依存関係>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </依存関係>
  <依存関係>
    <グループID>mysql</グループID>
    <artifactId>mysql-コネクタ-java</artifactId>
  </依存関係>
  <依存関係>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>テスト</scope>
  </依存関係>
</依存関係>

設定ファイル

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=ルート
spring.datasource.driver クラス名 = com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=更新
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true

コアコード

@レストコントローラ
パブリッククラスVisitorController{
 オートワイヤード
 プライベートVisitorRepositoryリポジトリ。
 @リクエストマッピング("/")
 パブリック文字列インデックス(HttpServletRequest リクエスト)
 {
 文字列 ip = request.getHeader("X-Real-IP");
 if(ip== null || "".equals(ip))
 {
  ip = リクエスト.getRemoteAddr();
 }
 訪問者 visitor = repository.findByIp(ip);
 if(訪問者 == null)
 {
  訪問者 = 新しい訪問者();
  訪問者IPを設定します。
  訪問者.setTimes(1L);
 }
 それ以外
 {
  訪問者.setTimes(訪問者.getTimes()+1);
 }
 リポジトリ.save(訪問者);
 "ip:"+visitor.getIp()+" "+visitor.getTimes()+" 回を返します。";
 }
}

エンティティクラス

@実在物
パブリッククラスVisitor{
 @ID
 @生成された値
 プライベートな Long ID;
 @列(nullable=false)
 プライベート 長時間;
 @列(nullable=false)
 プライベート文字列 ip;
 // get、set メソッドは省略}

リポジトリ レイヤー コードは、jpa 関連コンテンツを参照します。

ローカル データベースが開かれ、パスワードが上記で設定されます。mvn spring-boot:run で実行すると、IP の数が表示されます。IP の数は、統計ごとに自動的に増加します。

Docker Compose 設定ファイル

次のように新しい docker-compose.yaml ファイルを作成します。

バージョン: '3'
サービス:
 nginx:
  コンテナ名: v-nginx
  イメージ: nginx:1.13
  再起動: 常に
  ポート:
  - 80:80
  -443:443
  ボリューム:
  - ./nginx/conf.d:/etc/nginx/conf.d
 マイスク:
  コンテナ名: v-mysql
  イメージ:mysql/mysql-server:5.7
  環境:
  MYSQL_DATABASE: テスト
  MYSQL_ROOT_PASSWORD: ルート
  MYSQL_ROOT_HOST: '%'
  ポート:
  - 「3306:3306」
  ボリューム:
  - ./mysqldata:/var/lib/mysql
  再起動: 常に
  
 アプリ:
  再起動: 常に
  ビルド: ./app
  作業ディレクトリ: /app
  ボリューム:
   - ./app:/app
   - ~/.m2:/root/.m2
  さらす:
   - 「8080」
  依存:
   - nginx
   -MySQLについて
  コマンド: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker

主にこの設定ファイルについて説明し、ファイルシステムに関連する設定を追加します。

services には、nginx、mysql、app の 3 つのサービスがあります。
images は画像を使用することを指定します。 Nginx と mysql は docker リポジトリから直接取得されます。
アプリ内でイメージは指定されませんが、Dockerfile が配置されているディレクトリは build で指定されます。
ボリュームは、ローカル ディレクトリ内のファイルとコンテナーのターゲット アドレス間のマッピングを指定します。
環境はコンテナに必要な環境変数を設定します
ポートはローカルポートとコンテナのマッピングポートを構成します。ローカルポートが前面、コンテナポートが背面になります。

nginx でのボリューム設定の目的は、コンテナ内のデフォルトの nginx 設定ファイルに書き込んだ nginx 設定ファイルを直接上書きすることです。

MySQL でのボリューム構成の目的は、MySQL データ ファイルをローカルの mysqldata ディレクトリにマップすることです。コンテナを削除してもデータは残ります。

アプリの下のボリューム構成の機能: 最初の行はコード ファイルをコンテナーにマッピングします。 2 行目は、Maven リポジトリ ファイルをローカル リポジトリ ファイルにマッピングします。コンテナを削除した後、依存パッケージを再度ダウンロードせずに再度ビルドできます。

command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker

このコマンドは、Docker プロファイルを使用して、コンテナー内でプロジェクトをコンパイルして実行します。

ファイルを追加する必要があります

  • Dockerfile: 新しいファイルを作成し、FROM maven:3.5-jdk-8 という行を追加します。
  • Docker プロファイル: application.properties を application-docker.properties にコピーし、application-docker.properties のデータベース接続アドレスを jdbc:mysql://mysql:3306/test に変更します。
  • nginx 設定ファイル
サーバー{
  聞く 80;
  文字セット utf-8;
  access_log オフ;
  位置 / {
    proxy_pass http://app:8080;
    proxy_set_header ホスト $host:$server_port;
    proxy_set_header X-Forwarded-Host $server_name;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  場所 /static {
    access_log オフ;
    有効期限は30日です。
    エイリアス /app/static;
  }
}

デプロイメント検証

ファイル全体をサーバーにコピーし、 docker-compose upを使用して実行します。

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

以下もご興味があるかもしれません:
  • Docker Compose は MySQL に接続するために SpringBoot プロジェクトをデプロイしますが、そこで遭遇する落とし穴があります。
  • MySQL8 ベースの docker-compose デプロイメント プロジェクトの実装
  • docker-compose を使用して MySQL を実行する方法
  • docker-compose でデプロイしたときに MySQL にアクセスできなくなる問題の簡単な分析
  • docker compose を使用して elk システムを構築する方法
  • docker-compose を使用して mongodb と mysql を構築する詳細なプロセス

<<:  RedisとMySQLの違いを簡単に説明してください

>>:  jsはポップアップウィンドウをクリックすることでポップアップログインボックスを実装します

推薦する

IEの送信フォームの記録履歴クリックリターン情報を実現するためのCSSスタイルコントロールはまだ残っています

これは主に CSS スタイルのコントロールと META タグです。コードをコピーコードは次のとおりで...

LinuxでTomcatのポート番号を変更する方法

ここには複数の Tomcat があります。それらを同時に使用する場合は、ポート番号を別の番号に変更す...

MySQL (8 および 5.7) の Docker インストール

この記事では、Dockerを使用してMySQLデータベースとリモートアクセス構成をデプロイする方法を...

Nginx ロードバランシング クラスタの実装

(1)実験環境youxi1 192.168.5.101 ロードバランサーyouxi2 192.168...

Idea の起動速度を改善し、Tomcat ログの文字化けを解決する方法

目次序文アイデアの起動速度Tomcat ログが文字化けしている序文Idea を再インストールしたので...

要素UIポップアップコンポーネントをカプセル化する手順

el-dialogをコンポーネントとしてカプセル化するelement-ui を使用する場合、ポップア...

MySQL で行を列に変換したり、列を行に変換したりする詳細な例

mysql 行から列へ、列から行へ難しい文章ではないので、詳しく説明はしません。文章を読むときは、一...

忘れられたボタンタグ

注:この記事は他の人によって翻訳されていますが、考えるべき点が多く、理解しにくい点もあると感じていま...

無効にしてHTMLフォーム入力を送信した後にフォーム値が取得されない問題を解決する方法

フォーム入力ボックスの入力をdisable属性に設定して送信すると、入力ボックスの値を取得できなくな...

MySQL の重要なパフォーマンス インデックスの計算と最適化方法の概要

1 QPS 計算 (1 秒あたりのクエリ数) MyISAMエンジンベースのDBの場合 MySQL&g...

Vue.js ソースコード解析のカスタム手順の詳細な説明

序文コア機能のデフォルトの組み込みディレクティブ (v-model および v-show) に加えて...

Vuex でゲッターとアクションを使用するための追加手順

予備的注釈1.Vue2.xとVue3.xの違い: Vue 3.x にはヘルパー関数はありません。 V...

Dockerのヘルス検出メカニズム

コンテナの場合、最も単純なヘルスチェックはプロセス レベルのヘルスチェックであり、プロセスが稼働して...

Linux で crontab を使用してスケジュールされたタスクを追加する方法

序文Linux システムはシステム サービス crond によって制御されます。 Linux システ...

ショートビデオ(Douyin)の透かし除去ツールの実装コード

目次1. まず最初のリンクを取得する2. ブラウザでこのリンクを開いてください3. アドレスを開くと...