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

推薦する

Windows システムに VirtualBox と Ubuntu 16.04 をインストールするための詳細なチュートリアル

1. ソフトウェアの紹介バーチャルボックスVirtualBox は、無料のオープンソース仮想マシン ...

JS は複数のタブを切り替えるカルーセルを実装します

カルーセルアニメーションは、ページの外観とインタラクティブなパフォーマンスを向上させることができます...

WeChatアプレットは画像コントロールを選択します

この記事の例では、WeChatアプレットで画像コントロールを選択するための具体的なコードを参考までに...

nginx+FastDFS を使ってファイル管理システムを段階的に構築する

目次1. FastDFS の概要1. はじめに2. FastDFSストレージ戦略3. FastDFS...

MySQL の複合インデックスはどのように機能しますか?

目次背景複合インデックスを理解する左端一致原則フィールド順序の影響複合インデックスは単一のインデック...

mysql は sql ファイルを実行し、エラーを報告します エラー: 不明なストレージ エンジン 'InnoDB' ソリューション

問題を見つける最近、仕事で問題が発生しました。InnoDB タイプの SQL ファイルを実行すると、...

Linux スワップ パーティション (詳細説明)

目次リナックス1. SWAPとは2. swappiness は何を調節しますか? 3. スワップ操作...

スタイル属性 (element.style) で定義されたインライン スタイルを削除する方法

Magento を頻繁に変更する場合、element.style に遭遇することがあります。 これは...

WeChat アプレット ピッカー マルチ列セレクター (モード = multiSelector)

目次1. 効果図(複数列) 2. 通常セレクター: mode = selector、複数列セレクター...

MySQL はエンタープライズレベルのログ管理、バックアップ、リカバリの実践的なチュートリアルを実装します

背景事業が発展するにつれ、会社の事業内容や規模は拡大し続け、ウェブサイトには大量のユーザー情報やデー...

Dockerとイメージの操作方法

ミラーを探すDocker Hubのウェブサイトからイメージを検索できます。Docker Hubのウェ...

MySQL は制限を使用してページング例メソッドを実装します

1. 制限の基本的な実装一般的に、クライアントは、pageNo (ページ番号) と pageSize...

Dockerでspringcloudプロジェクトをデプロイする方法

目次Dockerイメージのダウンロードmysqlとnacosを起動する独自のJavaプロジェクトを変...

VMware Workstation Pro が Win10 アップデートにより開けなくなる問題の解決方法

今夜の夕食後にノートパソコンの電源を入れたところ、問題が発生しました。通常、コンピューターがスリープ...

VirtualBox を使用して Mac 上にローカル仮想マシン環境を構築する方法

1. ビッグデータとHadoopビッグデータについて研究し学ぶには、当然 Hadoop から始める必...