Traefikでdocker-composeのポート重複を解決する
昨日のDockerCon LiveのセッションでTraefikの存在を知ってしまったので、ちょっと試してみました😄
同一プロジェクト、または複数のプロジェクト間でportがかぶってちょっとずつ変えているなどなど
例) App1では3000ポートをApp2でも3000ポートを使っている
僕もいままでは、App2を4000ポートに変更して対応していました
"Simplify All the Things with Docker Compose" @mikesir87 さんのセッションを見て面白かったので試してみます
Thanks a lot, mikesir87👍
僕のサンプルアプリ
ちょっと調子のってDenoで書いてみましたw
1つのプロジェクトにApp1とApp2のサーバが3000ポートでサーバが立ってます
これをTraefikを使ってProxyしてみます
サンプルコードをみてもらったら、一目瞭然なので詳しい説明はしませんが(しないのかよ!)
ハマったこと
僕がちょっとハマったことを書いておきます
僕の開発環境はLinux + Rootless dockerです
Rootless dockerがちょっとハマりました。。。
公式ドキュメントのサンプルとかでは、80番ポートでProxyしてるのですが、Rootless dockerはrootユーザで起動してないので、 localhostの80番ポートが使えなかったです😭
なので、僕のサンプルコードでは3000番ポートをリッスンするようにしてます
あとは、socketファイルのパスが違うことですね、DOCKER_HOSTを確認してくださいね
$ echo $DOCKER_HOST unix:///run/user/1000/docker.sock
動作確認
コンテナを起動します
$ docker-compose up -d
app1.localhost:3000にアクセスしてみます
app2.localhost:3000にもアクセスしてみます
まとめ
どうでしょうか、めちゃ簡単にProxyできましたね👏
同一プロジェクトでは旨味はありませんが、プロジェクトをまたがる場合は重宝しそうです
プロジェクトをまたぐ場合は、Traefikをdeamonで動作させて、Traefikのnetworkをexportしておけばいいと思います
各プロジェクトでは、このネットワークに接続することで、Proxyできるようになります
もうポートを気にする必要はない!
Enjoy Traefik ヘ(^o^)ノ