目的
仮想マシンで提供していた 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 を作らないといけないのは収まりが悪いですが、実はどうにかできるのでしょうか。
-
192.0.2.0/24
は例示用 IPv4 アドレス https://tools.ietf.org/html/rfc5737↩