docker で Apollo をデプロイする詳細なチュートリアル

docker で Apollo をデプロイする詳細なチュートリアル

1. はじめに

ここでは apollo について詳しく説明しません。公式サイト https://github.com/ctripcorp/apollo ではすでに非常にわかりやすく説明されています。ここでは説明しません。まだ知らない場合は、公式サイトにアクセスして詳細を確認してください。

この記事では、docker を使用して Apollo とそのクラスターをデプロイし、それを全員と共有し、自分用の記録を作成する方法を記録します。

注: 私は直接デプロイから始め、公式 Web サイトに従って自分でデータベースを作成して初期化しました。

2. ソースコードのコンパイル

2.1 ネットワーク戦略

ネットワークポリシーは公式サイトに記載されている通り、直接利用することができます。具体的には、apollo-configservice/src/main/resources/application.yml と apollo-adminservice/src/main/resources/application.yml をそれぞれ編集し、無視するネットワークカードを追加します。

次の例は、apollo-configservice の場合、docker0 および veth.* ネットワーク カードが Eureka に登録されているときに無視されることを示しています。

春:
   応用:
     名前: apollo-configservice
   プロフィール:
    アクティブ: ${apollo_profile}
   雲:
    inetutils:
     無視されるインターフェース:
      -docker0
      -veth.*

注意: application.yml を変更するときは注意し、spring.application.name などの他の情報に間違いがないようにしてください。

2.2 登録済みネットワークを動的に指定する

Dockerを使用してクラスターを構築する場合、adminserviceとconfigserviceの両方が登録センターにアドレスを登録する必要があります。登録IPが指定されていない場合、Docker内のネットワークが登録され、ネットワークが切断されます。

次のコードを apollo-configservice/src/main/resources/bootstrap.yml と apollo-adminservice/src/main/resources/bootstrap.yml に追加します。

ユーレカ:
 実例:
    IP アドレス: ${eureka.instance.ip-address}

ここでの値は環境変数から取得され、コンテナ外での構成により、デプロイメントの柔軟性が向上します。

この時点でソースコードの変更は完了しており、直接ビルドしてパッケージ化し、3 つのサービスに対応する zip パッケージを取得できます。

変更するのが面倒な場合は、変更したソースコードを https://github.com/yuelicn/apollo から直接ダウンロードして、直接パッケージ化することもできます。

3. Dockerfileの記述

Apollo の Dockerfile は非常にシンプルなので、公式 Web サイトで提供されているものをそのまま使用できます。以下は adminservice の例です。

# apollo-adminservice の Dockerfile
# ビルド:
次のコマンドを実行して、 docker build を実行します。
# 実行方法:
# docker run -p 8090:8090 -d --name apollo-adminservice apollo-adminservice

java:8-jre から
メンテナー ルイ

環境バージョン 1.5.0

apt-get install unzipを実行します

apollo-adminservice-${VERSION}-github.zip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip を追加します。

unzip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip -d /apollo-adminservice \ を実行します。
  && rm -rf /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip \
  && sed -i '$d' /apollo-adminservice/scripts/startup.sh \
  && echo "tail -f /dev/null" >> /apollo-adminservice/scripts/startup.sh

エクスポーズ8090

コマンド ["/apollo-adminservice/scripts/startup.sh"]

注目すべきは

1: パッケージのバージョンに応じてバージョンを変更する必要があります
2: ZIPパッケージを追加するときにパスを変更する

3 つのサービスの Dockerfile ファイルは基本的に同じなので、ここでは詳細には触れません。必要な友人は https://github.com/yuelicn/docker-apollo から直接ダウンロードできます。

4 docker-compose を書く

4.1 apollo-configservice-compose.yml

バージョン: "3"
サービス:
 アポロ構成サービス:
  コンテナ名: apollo-configservice
  ビルド: apollo-configservice/
  画像: apollo-configservice
  ポート:
   - 8080:8080
  ボリューム:
   - 「/docker/apollo/logs/100003171:/opt/logs/100003171」
  環境:
   - spring_datasource_url=jdbc:mysql://127.0.0.1:8306/ApolloConfigDB_TEST?characterEncoding=utf8
   -spring_datasource_username=ルート
   -spring_datasource_password=mysql2019*
   -eureka.instance.ip-address=172.11.11.11

  再起動: 常に

注意事項

1: ビルド時にDockerfileの場所を指定します。
2: 環境変数にデータベース構成情報を指定します
3: eureka.instance.ip-address は、eureka に登録されているアドレスを指定します。物理マシンのイントラネット アドレスを使用するのが最適です。

特記事項: 開始する前に、ApolloConfigDBデータベースのServerConfigのeureka.service.url値を特定のIPに変更することをお勧めします。
起動する:

docker-compose -f apollo-configservice-compose.yml をアップ --build -d

4.2 apollo-adminservice-compose.yml

apollo-adminservice-compose.yml の内容は基本的に apollo-configservice-compose.yml と同じなので、ここでは一つ一つ説明しません。

4.3 アポロポータルコンポーズ.yml

バージョン: "3"
サービス:
 アポロポータル:
  コンテナ名: アポロポータル
  ビルド: apollo-portal/
  画像: アポロポータル
  ポート:
   -8070:8070
  ボリューム:
   - 「/docker/apollo/logs/100003173:/opt/logs/100003173」
   - "/apollo-portal/config/apollo-env.properties:/apollo-portal/config/apollo-env.properties"
  環境:
   - spring_datasource_url=jdbc:mysql://127.0.0.1:8306/ApolloPortalDB?characterEncoding=utf8
   -spring_datasource_username=ルート
   -spring_datasource_password=mysql2019*
   

  再起動: 常に

注記:
1: 以下は基本的に上記のconfigserviceと同じであることに注意してください
2: 特記事項は重要です!重要!重要!重要!重要!ボリューム:私は
apollo-env.properties ファイルはコンテナの外部にマップされます。独自の apollo-env.properties ファイルを設定したら、独自のマウント アドレスを入力し、コロンの前のアドレス「/apollo-portal/config/apollo-env.properties」を独自のものに変更します。この設定ファイルは起動前に指定する必要があります。
起動する

docker-compose -f apollo-configservice-compose.yml をアップ --build -d

4.3.1 アポロ環境プロパティ

ローカル.meta = http://localhost:8080
dev.meta = ${dev_meta}
fat.meta=${fat_meta}
uat.meta = ${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}

独自のメタアドレスを設定します。メタアドレスがない場合は、直接削除できます。わからない場合は、公式 Web サイトにアクセスして詳細を確認してください。環境が設定されたら、対応するデータベースの ApolloPortalDB.ServerConfig の apollo.portal.envs 値を変更し、設定した環境を入力します。それ以外の場合は、ポータル管理ページでデフォルトの開発環境のみが表示されます。

5 docker-compose.ymlを完成させる

一つずつ始めるのが面倒な場合は、完全な作成を使用して開始することもできます。

バージョン: "3"
サービス:
 アポロ構成サービス:
  コンテナ名: apollo-configservice
  ビルド: apollo-configservice/
  画像: apollo-configservice
  ポート:
   - 8080:8080
  ボリューム:
   - 「/docker/apollo/logs/100003171:/opt/logs/100003171」
  環境:
   - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloConfigDB?characterEncoding=utf8
   -spring_datasource_username=ルート
   -spring_datasource_password=Tusdao@xx*
   -eureka.instance.ip-address=172.11.11.11
  再起動: 常に

 アポロ管理サービス:
  コンテナ名: apollo-adminservice
  ビルド: apollo-adminservice/
  画像: apollo-adminservice
  ポート:
   -8090:8090
  ボリューム:
   - 「/docker/apollo/logs/100003172:/opt/logs/100003172」
  環境:
   - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloConfigDB?characterEncoding=utf8
   -spring_datasource_username=ルート
   -spring_datasource_password=Tusdao@xx*
   -eureka.instance.ip-address=172.11.11.11
  依存:
   - アポロ構成サービス

  再起動: 常に

 アポロポータル:
  コンテナ名: アポロポータル
  ビルド: apollo-portal/
  画像: アポロポータル
  ポート:
   -8070:8070
  ボリューム:
   - 「/docker/apollo/logs/100003173:/opt/logs/100003173」
   - 「/Apollo/docker-image/apollo-portal/config/apollo-env.properties:/apollo-portal/config/apollo-env.properties」
  環境:
   - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloPortalDB?characterEncoding=utf8
   -spring_datasource_username=ルート
   -spring_datasource_password=Tusdao@xx*
  依存:
   - アポロ管理サービス
  再起動: 常に

注: 変更が必要な箇所は基本的に単一の場合と同じなので、ここでは詳細には触れません。

この時点で、Apoll の docker デプロイメントは基本的に完了しています。完全な docker デプロイメント ファイルが必要な場合は、https://github.com/yuelicn/docker-apollo にアクセスしてください。

6 クラスター構築

Apollo クラスターの構築は非常に簡単です。2 か所を変更するだけです。説明には正式な環境 (pro) を使用します。
pro環境ではadminserviceとconfigserviceを2セット構築し、データベースは同じApolloConfigDBです。

1: ServerConfig に eureka.service.url 値と eureka 接続情報をカンマで区切って記述します: http://IP-1:port/eureka、http://IP-2:port/eureka

2: apollo-env.properties で対応する環境の接続情報を変更します (例: pro.meta=http://IP-1:port,http://IP-2:port)。アドレスはカンマで区切ることができます。

その後、サービスを再起動すれば完了です。

最後に、adminservice と configservice は、データベースを含む各環境に個別にデプロイする必要があることを強調します。展開する必要があるポータルのセットは 1 つだけです。

OK! 完了。上記は私の個人的なビルド記録です。お役に立てれば幸いです。間違っている点があればご指摘ください。

変更されたソースコードアドレス: https://github.com/yuelicn/apollo

組織化された Docker-Apollo: https://github.com/yuelicn/docker-apollo

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

以下もご興味があるかもしれません:
  • CentOS7 で docker を使用して Apollo 構成センターをデプロイする実装
  • docker-compose を使用して Apollo カスタム環境をデプロイする詳細なチュートリアル

<<:  MySQL サーバー IO 100% 分析および最適化ソリューション

>>:  CentOS 7 で MySQL 5.7.23 をアップグレードする際の落とし穴と解決策

推薦する

Windows 10 での MySQL 5.7.19 インストール チュートリアル MySQL のルート パスワードを忘れた場合の変更方法

MySQL 5.7.19のインストールを例に挙げると、まずダウンロードしますもちろん、最初に行うこと...

Docker-Composeコマンドの使い方の詳しい説明

Docker コンテナはさまざまな方法で管理およびデプロイできます。 Docker コマンドを直接使...

デザインのヒント: きっと気に入っていただけると思います

<br />このタイトルを見ると、見覚えがあるかもしれません。多くのウェブサイトが同様の...

Flexboxレイアウトの最もシンプルなフォーム実装

フレキシブル レイアウト (Flexbox) はますます人気が高まっており、CSS レイアウトの記述...

js はランダムロールコールを実装します

この記事では、ランダムロールコールを実装するためのjsの具体的なコードを参考までに共有します。具体的...

Vue は PDF ファイルのオンライン プレビューを実装します (pdf.js/iframe/embed を使用)

序文現在、私はコースウェア PPT のオンライン プレビューを必要とする高品質のコースに取り組んでい...

MySQL で not in を使用して null 値を含める問題を解決する

知らせ! ! ! uid が (a,b,c,null) に含まれないユーザーから * を選択します。...

ミニプログラムにより、製品属性の選択や仕様の選択が可能

この記事では、ミニプログラムで製品属性選択または仕様選択を実装するための具体的なコードを参考までに共...

MySQL 5.7 の Docker バージョンを MySQL 8.0.13 にアップグレードし、データを移行する

目次1. 古いMySQL5.7データをバックアップする2. MySQL8.0.13のイメージをプルし...

MySQL マルチテーブルクエリの具体例

1. SELECT句を使用して複数のテーブルをクエリするSELECT フィールド名 FROM tab...

Ubuntu 16.04 に nvidia ドライバー + CUDA + cuDNN をインストールする詳細なチュートリアル

準備1. GPUがCUDAをサポートしているかどうかを確認するlspci | grep -i nvi...

Linux 時間サブシステムの時間表現例の詳細な説明

序文Linux カーネルでは、元のコードとの互換性を保つため、または特定の仕様に準拠するため、また現...

JavaScript カラービューア

この記事では、カラービューアを実装するためのJavaScriptの具体的なコードを参考までに紹介しま...

廃止された Docker は Podman に置き換えられますか?

Kubernetes チームは最近、最新バージョンの Docker でサポートされている機能を廃止...

Linux で MySQL のデフォルト エンコーディングを変更する方法

開発プロセス中に、MySQL データベースを復元した後にデータベース データに文字化けが発生した場合...