目的
仮想マシンで提供していた plantuml-server を Docker コンテナーに変更します。
plantuml-server は↓を tomcat で稼働させていました。
github.com
前提
nginx を docker-compose でリバースプロキシとして利用している
https://example.com/plantuml/
で plantuml サーバーを提供しています。
/plantuml
にアクセスすると nginx が仮想マシン (192.0.2.170
) に転送するようにしています。1
location /plantuml/ {
# etc...
proxy_pass http://192.0.2.170:8080;
}
修正内容
サブディレクトリー対応するよう plantuml/Dockerfile
を作成
Docker Hub に plantuml-server があります。
が、サブディレクトリー (/plantuml
) に対応していないため、そのままでは利用できません。
https://example.com
にアクセスすると plantuml server が見られる状態を https://example.com/plantuml
に変えたいです。
Jetty は war
の名前を変えると対応できるので、以下の Dockerfile を書きます。
FROM plantuml/plantuml-server:jetty
ARG BASE_URL=plantuml
RUN mv /var/lib/jetty/webapps/ROOT.war /var/lib/jetty/webapps/$BASE_URL.war
(ROOT.war
は特殊なファイル名のようです。https://example.com/ROOT
ではなく https://example.com
へのアクセスで公開されるアプリケーションになります。)
docker-compose.yml への追加
docker-compose.yml からの相対パスが plantuml/Dockerfile
の位置に、先程の Dockerfile を配置します。
docker-compose.yml に plantuml サービスを追加します。
plantuml:
build: ./plantuml/
restart: always
また、nginx サービスに plantuml へのネットワーク接続を追加します。
nginx:
image: nginx:1.14.2-alpine
volumes:
- ./files/nginx/etc/letsencrypt:/etc/letsencrypt
- ./nginx/conf.d:/etc/nginx/conf.d
ports:
- 192.0.2.146:443:443
restart: always
+ links:
+ - plantuml
docker-compose を再起動します。
docker-compose build && (docker-compose down; docker-compose up -d)
nginx 設定の修正・適用
nginx/conf.d/default.conf
を修正します。
- proxy_pass http://192.0.2.170:8080;
+ proxy_pass http://plantuml:8080;
nginx プロセスの設定を更新します。
docker-compose exec nginx nginx -s reload
疑問点
plantuml/plantuml-server:jetty の Dockerfile では ARG でサブディレクトリーが指定されています。
docker-compose で args を指定できるのは build
(image
ではなく) のときなので使いませんでした。
docker-compose.yml で完結せずに Dockerfile を作らないといけないのは収まりが悪いですが、実はどうにかできるのでしょうか。