Contents
Traefik Docker 設定 やり方:初心者向けステップバイステップガイド
現時点において、Docker環境でリバースプロキシを構築する際にはTraefikの導入が主流です。アプリケーションのホスティングやHTTPS化に悩む開発者は多いですが、Traefikならラベルによる動的設定やLet's Encrypt自動取得が可能で、初期セットアップが簡単です。本記事ではDocker Composeファイル作成からHTTPS構築までをステップバイステップで解説します。
TraefikとDocker環境構築の基礎知識
Traefikはコンテナ時代に最適化されたリバースプロキシであり、Dockerとの連携で動的ルーティング設定が可能です。Nginxのような静的な設定ファイルに頼らないため、アプリケーションを増やすたびに手動で変更する必要がありません。
Traefikとは?
TraefikはDockerコンテナのラベル情報からルーティング設定を自動生成します。サービス起動時に即時反映される仕組みにより、アプリケーションの追加や変更に迅速に対応できます。公式ドキュメントでは「リバースプロキシの未来」とも述べられています。
Dockerとの連携メリット
| 項目 | 通常設定 | Traefikによる自動設定 |
|---|---|---|
| ルーティング定義方法 | 手動でNginx設定書を編集 | サービス起動時にラベル指定だけで反映 |
| HTTPS化手順 | 証明書ファイルの手動配置が必要 | Let's Encryptによる自動取得が可能 |
| 環境変更対応 | コンテナ増加に伴う設定変更作業増加 | 1サービスごとにラベルを追加するだけで完結 |
Docker Composeファイルの作成手順
Docker Composeファイルを正しく記述することで、Traefikとアプリケーションコンテナを同時に起動できます。ネットワーク設定やイメージ指定のミスは初期段階で発見しやすいため、確認項目を明確にしましょう。
事前準備(Dockerインストール確認)
docker --versionでインストール済みか確認- Docker Composeを実行するには
docker-compose --versionもチェック
注意:Traefik v3以降ではDocker Engine 20.10以上のバージョンが必要です。
基本構造のテンプレート
以下はTraefik + アプリケーションの基本的なdocker-compose.yml例です:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
version: '3.8' services: traefik: image: traefik:v3.12.5 ports: - "80:80" - "443:443" volumes: - ./letsencrypt:/etc/letsencrypt - /var/run/docker.sock:/var/run/docker.sock command: - --providers.docker - --entrypoints.web.address=:80 - --entrypoints.websecure.address=:443 - --certificatesresolvers.letsencrypt.acme.email=[メールアドレス削除] - --certificatesresolvers.letsencrypt.acme.storage=/etc/letsencrypt/acme.json networks: - traefik-net app: image: nginx labels: - "traefik.http.routers.app.rule=Host(`example.com`)" - "traefik.http.routers.app.entrypoints=websecure" - "traefik.http.routers.app.tls=true" networks: - traefik-net networks: traefik-net: |
サービス定義のポイント
- ポート割当:Traefikは
80と443を必ず開放する必要があるため、外部アクセス用に設定してください。 - volumesマウント:証明書保存先(
./letsencrypt)はプロジェクトディレクトリ内に作成することを推奨します。
動的ルーティング設定の実践方法
Traefikではラベル情報を利用して動的にルーティングを変更できます。サービス起動時に即時反映されるため、運用中の設定変更が簡単です。
ラベルの基本構文
|
1 2 3 4 |
labels: - "traefik.http.routers.service-name.rule=Host(`example.com`)" - "traefik.http.routers.service-name.entrypoints=websecure" |
- rule:ルーティング条件(ホスト/パス)
- entrypoints:どのポートでアクセスを許可するか
- tls:HTTPS有効化
ルールの具体例(ホスト/パス)
| 設定内容 | ラベル記述例 |
|---|---|
example.comへのリクエストをアプリに振り分ける |
"traefik.http.routers.app.rule=Host(example.com)" |
/api以下のパスのみを特定ルーティングする |
"traefik.http.routers.api.rule=PathPrefix(/api)" |
サービス自動検出の仕組み
TraefikはDocker Engineと通信し、traefikというラベルがついたコンテナを自動で検知します。以下の条件を満たすサービスのみルーティング対象になります。
traefik.http.routersラベルがあるtraefik.docker.networkラベルとネットワーク名が一致する
HTTPS自動取得(Let's Encrypt)の流れ
HTTPS化は証明書申請手順を1度設定すれば自動で更新されるため、運用負荷が減ります。以下に主なフローを解説します。
証明書申請に必要な準備
- ドメイン所有確認:Let's Encryptでは
ACMEプロトコルを使用し、DNSレコードやHTTPリクエストで所有権を検証します。 - メールアドレス登録:証明書の有効期限やエラー通知に使用されます。
コンフィグファイルの記述例
|
1 2 3 4 |
command: - --certificatesresolvers.letsencrypt.acme.email=[メールアドレス削除] - --certificatesresolvers.letsencrypt.acme.storage=/etc/letsencrypt/acme.json |
リロード時の注意点
- 証明書取得失敗時の対応:
acme.jsonファイルを手動で削除することでリトライできます。 - ドメイン変更のタイミング:DNSレコード更新後、Traefikコンテナを再起動する必要があります。
ネットワーク構成のベストプラクティス
Traefikとアプリケーションサービスは専用ネットワークで分離し、アクセス制御やセキュリティ強化を図る必要があります。ネットワーク設計ミスが原因で起動失敗するケースが多いです。
Traefik専用ネットワークの作成
|
1 2 3 4 |
networks: traefik-net: driver: bridge |
- bridgeドライバを使用することで、コンテナ間通信を確実にできます。
- 外部から見えるIPアドレスが必要な場合は
hostドライバを使いますが、セキュリティリスクが高いため避けてください。
アプリケーションサービスとの接続方法
アプリケーションコンテナとTraefikは同じネットワークに所属する必要があります。以下のような構成で設定してください:
|
1 2 3 4 5 |
services: app: networks: - traefik-net |
外部アクセス設定
| サービス | IPアドレス割当方法 |
|---|---|
| Traefikコンテナ | ホストOSのIPにバインド(ports:で指定) |
| アプリケーションコンテナ | traefik-netネットワーク内でのみアクセス可能 |
Traefik v3環境への移行確認
Traefik v3では設定ファイル構造やパラメータが大幅に変更されています。既存のv2環境からv3へ移行する際は、互換性をしっかり確認してください。
v2からv3の主な変更点
| 項目 | v2の記述例 | v3の記述例 | 詳細説明 |
|---|---|---|---|
| プロバイダ指定 | - --providers.docker |
--providers.docker |
引数形式が変更され、コマンドライン引数の順序が厳密に制約されるようになった。 |
| エントリポイント定義 | --entrypoints.web.address=:80 |
--entrypoints.web.address=:80(一部パラメータ変更あり) |
v3ではエントリポイントの設定がより柔軟になり、複数のプロトコルをサポートするようになった。 |
設定ファイルの互換性チェック
- YAML構文:v3では
version: '3.8'以上が必須です。 - コマンドライン引数:
--providers.dockerなど多くのオプションが変更されています。
官方公式ドキュメント(https://traefik.io/)にはv2とv3の比較表や設定例が公開されており、移行前に手元環境でテストすることを強く推奨します。Dockerについてはhttps://www.docker.com/、Let's Encryptについてはhttps://letsencrypt.org/の公式情報を参照してください。
よくある設定ミスと回避策
ラベルのスペルミス
| 項目 | 誤った記述例 | 正しい記述例 |
|---|---|---|
| ルーター名の定義 | traefik.http.routers.app.rule |
traefik.http.routers.app.rule(スペースは不要) |
| エントリポイント指定 | entrypoints=websecur |
entrypoints=websecure |
対策:Traefikのコンテナログを確認し、エラー内容からミス箇所を特定してください。
docker logs traefikコマンドで取得可能です。
ネットワーク定義の誤り
- ネットワーク名不一致:Traefikとアプリケーションサービスが同じネットワークに所属していない場合、通信できないことがあります。
- ネットワークを作成していない:
docker network lsで確認し、必要ならdocker network create traefik-netで事前に作成してください。
証明書申請時のタイムアウト
- DNSレコードの設定待ち時間:Let's Encryptによるドメイン所有確認に時間がかかることがあります。10分程度待ってから再起動してみてください。
- Firewallのポート開放:80番ポートが外部アクセス可能な状態でないと、証明書取得に失敗します。
まとめ
本記事ではTraefikとDocker環境構築について以下の内容を解説しました:
- Traefikとは?Dockerとの連携メリット
- Docker Composeファイルの作成手順(事前準備、テンプレート、サービス定義)
- 動的ルーティング設定方法(ラベル構文、ルール例、自動検出仕組み)
- HTTPS自動取得フローと証明書申請時の注意点
- ネットワーク構成のベストプラクティス
- v3環境への移行確認と互換性チェック
- よくある設定ミスと回避策
Traefikを活用することで、Dockerアプリケーションのホスティングがこれまでにないほど楽になります。 今回紹介した手順で実装し、コメント欄にあなたの設定方法を共有してください。他の読者にとっても参考になるでしょう。