https-portal があまり知られてないようなので紹介記事だけ書いとく。
https://github.com/SteveLTN/https-portal

あなたがすでにhttpで動作するサービスのdockerコンテナを持ってるなら、こいつを docker-compose に加えるだけで https 対応は完了。

え?

加えるだけで完了。

まじです。

https-portal は何をするものか

基本的には https のリクエストを受け取り、他のコンテナの http へ転送するリバースプロキシとして動作する nginx である。
ところで https を提供するには証明書の取得、設定などが必要だが、こいつはそれを全自動でやってくれる。

え?

証明書の取得、設定を全自動でやってくれる。

まじです。

期間延長も自動でやってくれるらしい。

まあとにかく便利なので、 Let's encrypt したい人は使わない手はないですね。

設定方法

冒頭のURL見れば全部書いてあるので改めて書くこと何もないのだけど、 Quick Start のとこだけコピペしてざっくり解説しておくと、

https-portal:
  image: steveltn/https-portal:1.0.0
  ports:
    - '80:80'
    - '443:443'
  links:
    - wordpress
  restart: always
  environment:
    DOMAINS: 'wordpress.example.com -> http://wordpress'
    # STAGE: 'production'
    # FORCE_RENEW: 'true'

wordpress:
  image: wordpress
  links:
    - db:mysql

db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: '<a secure password>'

という感じ。 wordpress と db のとこは、おのおの公開したいwebサービスの設定と置き換わる。ポイントとなるのは https-portal.environment のあたり。

    DOMAINS: 'wordpress.example.com -> http://wordpress'

左側が実際に公開したいドメイン名。 (当たり前だけどドメインは事前に取得しておく必要があり、 Let's encrypt が所有権を確認するためにはあらかじめDNSを設定しておく必要がある)
-> の右側は docker のコンテナ名。https-portal が受け取ったリクエストをこのURLへリダイレクトし、レスポンスをまたsslにして返却してくれるという感じ。

# STAGE: 'production'

これコメントアウトしておくと、Let's encrypt せずに、オレオレ証明書を用いたhttps プロキシとして動作してくれるのでまずはこれでローカル環境などで動作確認をする。うまくhttps通信ができることを確認できたら、コメントを外してパブリックな環境にデプロイし、DNSを向けると、自動的に証明書を取得、設定してくれる。