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はポップアップウィンドウをクリックすることでポップアップログインボックスを実装します

推薦する

Grafana+Prometheus を使用して MySQL サービスのパフォーマンスを監視する

Prometheus (プロメテウスとも呼ばれる) 公式サイト: https://prometheu...

TypeScript 2.0 マーク付き共用体型の詳細な説明

目次タグ付きユニオン型を使用した支払い方法の構築タグ付きユニオン型を使用した Redux アクション...

HTML のキャンバスに基づくスクリーンショットのデモ

冒頭に書いた以前、Renren で JS ベースのスクリーンショット ソリューションについて説明した...

ドキュメントの場所の比較

<br />2 年前に PPK が投稿した素晴らしいブログ記事では、contains()...

Mysql5.7 で中国語の文字化けの問題を解決する

MySQL 5.7 を使用すると、Web ターミナル経由でデータベースに中国語の文字を書き込むと文字...

シェルスクリプトを使用して Docker サービスを一括で開始および停止する

目次Dockerを起動するDockerを停止するPython 呼び出しスクリプト最近、日々のテストで...

docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法

目次1. 概要1. スカイウォーキング入門2. スカイウォーキング建築3. スカイウォーキングはどの...

初心者向けウェブサイト構築チュートリアルの概要

これら 6 つの記事を書いた後、私は少し混乱し始めました。次にどこに書けばいいのか分かりません。ドメ...

MySQL 8.0.22 解凍版インストールチュートリアル(初心者向け)

目次1. リソースのダウンロード2. ソフトウェアを解凍する2.1 場所を選択する2.2 名前を変更...

docker run後にコンテナがExited (0)と表示される問題を解決する

Centos7 上で openresty 用の Dockerfile を作成し、ビルドしました。 d...

CSSで記事の区切り線のスタイルを実装するさまざまな方法のまとめ

この記事では、CSS で記事の区切り線を実装するさまざまな方法をまとめています。区切り線はページを美...

使用状況分析を備えたMySQL

持つことの使用法having 句を使用すると、グループ化後にさまざまなデータをフィルター処理できます...

React-Native環境のセットアップと基本的な紹介

環境の準備1. 環境構築React Native 中国語ウェブサイト2. 開発ツール フロントエンド...

vue3 で vue-router を使用するための完全な手順

序文ルーティングの管理は、ほとんどのシングルページ アプリケーションにとって不可欠な機能です。 Vu...

Vueはファイルのアップロードとダウンロードを実装します

この記事では、参考までにVueのファイルのアップロードとダウンロードの具体的なコードを紹介します。具...