2017-07-27 13 views
0

私はドッカーの作成ソリューションに変換しようとしているウェブサイトを持っています。異なるドッカーコンテナでウェブサイトのさまざまな部分をシームレスにホストする

ウェブサイトの一部はCMS(WordPress、具体的には)であり、現在Tomcatによって処理されているJava Webアプリケーションもいくつかあります。

現在のアプローチは、私が公式のWordPressコンテナと公式のTomcatコンテナを持っていることです。私はWordPressに(本当にこの質問の一部ではないMySQLコンテナ経由で)自分のカスタムコンテンツを読み込み、WARファイルをtomcatに読み込みます。

これは問題です。 WordPress Webサイトの一部には、Javaアプリケーションへのリンクがあります。以前は、これらのリンクの一部は/Application1のような単純な相対リンクであったため、ユーザーはJavaアプリケーションにアクセスすることができました。

これは別々のコンテナでホストされているため、WordPressコンテナには「Application1」という名前がないため、これを行うことはできません。 - 正常に動作します

# Tomcat exposes port 8085 
RewriteRule ^.*Application1/(.*)$ http://localhost:8085/Application1/$1 [R,L] 

しかし、これは、ユーザーがワードプレスでアプリケーション1のリンクをクリックした場合、そのブラウザは、その後localhost:8085にリダイレクトすることを意味します:私はこのようなRewriteRulesとWordPressのコンテナ用のhtaccessファイルを変更しましたこのコンテナのセットをローカルで実行しても、リモートユーザーは使用できません。

localhostを実行するサーバーの実際の名前に変更できます。ただし、このスタックが実行されるすべてのサーバーに対して手動で更新するか、開発者向けにlocalhostにリセットする必要があります。

WordPressとTomcatを1つのコンテナにまとめることができましたが、アップグレードする必要がある場合は、カスタムコンテナを再構築するのではなく、取り込んでいるコンテナのバージョンを変更するだけですスクラッチから。

これを行うためのよりシームレスな方法があるので、ユーザーのブラウザのURLは変更されません。リモートユーザーがこのサイトのさまざまな部分が異なるコンテナにホストされていることを知ることさえできないように、この作業を行う方法はありますか?

答えて

0

開発中と本番でドッカー作成を行うと仮定すると、localhostを対応するアップストリームのservicenameに置き換えます。

たとえば、httpd、fpm(wordpress)、java(tomcat)の3つのコンテナがあります。 domain.tld/phpの場合はfpm:9000にリダイレクトするようにhttpdを設定し、要求がdomain.tld/Application1の場合はjava:8086にリダイレクトします。

docker-composeの実際のサービス名は、コンテナ(すべてのコンテナ)のホスト名として利用できるので、コンテナは他のコンテナのservice-name - 実際のコンテナIP(開発/生産およびホストの移行中に変更される)を知らなくても、コンテナ間の通信を非常に簡単かつ事前設定可能にします。

0

私はそれを理解したと思います: RewriteRuleの代わりに使用します。

これは私が欲しいものを私を得るようだ:

ProxyPass "/Application1" "http://my-tomcat-server:8080/Application1" 
ProxyPassReverse "/Application1" "http://my-tomcat-server:8080/Application1" 
関連する問題