Dockerで別コンテナでApache+Tomcat連携する
別コンテナでApacheとTomcatを立てて、コンテナ間通信を試します。
--link
オプションは非推奨なので使いません。
イメージ
$ docker pull httpd:alpine $ docker pull tomcat:alpine
イメージをダウンロードします。軽量なのでAlpine Linuxベースのイメージを使用します。
コンテナ
$ docker run -d -p 80:80 --name httpdalpine httpd:alpine $ docker run -d --name tomcatalpine tomcat:alpine
httpdのみホストの80ポートとコンテナの80ポートをマッピングします。
apacheからtomcatへの通信は8009ポートを経由するので、8080ポートはマッピングする必要がありません。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cad66f9e8fe tomcat:alpine "catalina.sh run" 8 minutes ago Up 8 minutes 8080/tcp tomcatalpine 51e88db0f1d0 httpd:alpine "httpd-foreground" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp httpdalpine
COMMANDがcatalina.sh runとhttpd-foregroundであることを確認しておきます。
ipアドレス確認
$ docker inspect bridge
TomcatのコンテナのIPアドレスを確認しておきます。ネットワーク未指定の場合はbridgeというネットワークにコンテナ作成されます。同一ネットワークの為コンテナ間通信が可能となります。
コンテナ | IPアドレス |
---|---|
Apache | 172.17.0.2 |
Tomcat | 172.17.0.3 |
IPは上記の通りでした。
httpd.conf
httpdにログインしてhttpd.confなど修正します。Alpine Linuxなのでログインシェルはashです。
$ docker exec -it httpdalpine ash
httpd.confの修正、httpd-proxy.conf作成を行います。
vi /usr/local/apache2/conf/httpd.conf
httpd.conf
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so Include conf/extra/httpd-proxy.conf
上記の3行を有効にしてAJPプロトコルを使用します。
httpd-proxy.conf
$ echo 'ProxyPass / ajp://172.17.0.3:8009/' > /usr/local/apache2/conf/extra/httpd-proxy.conf
httpd-proxy.confファイルを作成します。このファイルにTomcatのIPアドレスを指定します。
※ProxyPathではなくProxyPass
※172.17.0.3はTomcatコンテナ(Alpine Linux)のIPアドレス
$ httpd -t AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message Sytax OK $ exit
文法にエラーがないことを確認してexitで抜けます。ServerNameは無視してOK
コンテナ再起動
$ docker restart httpdalpine
コンテナ再起動します。
ブラウザで表示確認
ポート80でTomcatのウェルカムページが表示されていれば、Apache経由でTomcatにアクセスできていることが確認できます。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント