マイクラ Docker-Compose マルチサーバー
watchtower 自動アップデート&TCP-Proxy 完全ガイド
2025年7月最新情報
Docker-Composeを使ったマインクラフトマルチサーバー構築の最新手法を解説。watchtowerによる自動アップデート機能や.env共有設定まで網羅的に紹介します。
マインクラフトサーバーの運用で最も面倒な作業の一つが、定期的なアップデートです。Docker-Composeとwatchtowerを組み合わせることで、完全に自動化された安定したマルチサーバー環境を構築できます。
Docker-Compose マルチサーバー構築の基本概念
なぜDocker-Composeを使うのか
従来のMinecraftサーバー運用では、バージョンアップのたびに手動でjarファイルを更新し、設定ファイルをバックアップしてサーバーを再起動する必要がありました。Docker-Composeを使用することで、これらの作業がすべて自動化されます。
Docker-Composeの主なメリット
- 複数のサーバーを一元管理
- 設定ファイルの統一管理
- ワンコマンドでの起動・停止
- 自動アップデート機能
マルチサーバー構成の設計
効率的なマルチサーバー環境を構築するには、以下の要素を考慮する必要があります:
プロキシサーバー
Velocity/BungeeCord
ゲームサーバー
Survival/Creative/Mini-games
データベースサーバー
MySQL/PostgreSQL
監視・管理システム
Watchtower
watchtower 自動アップデート設定
watchtowerの基本設定
watchtowerは、稼働中のコンテナと元になったコンテナイメージを監視し、イメージの更新を検知して自動的にアップデートを実行するツールです。
version: '3.8'
services:
watchtower:
container_name: minecraft_watchtower
image: containrrr/watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Tokyo
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_POLL_INTERVAL=3600
- WATCHTOWER_INCLUDE_RESTARTING=true
- WATCHTOWER_NOTIFICATIONS=discord
- WATCHTOWER_NOTIFICATION_URL=${DISCORD_WEBHOOK_URL}
高度な自動アップデート設定
設定項目 | 説明 | 推奨値 |
---|---|---|
WATCHTOWER_CLEANUP | 古いイメージの自動削除 | true |
WATCHTOWER_POLL_INTERVAL | チェック間隔(秒) | 3600(1時間) |
WATCHTOWER_SCHEDULE | Cronスケジュール | 0 0 2 * * *(毎日2時) |
WATCHTOWER_MONITOR_ONLY | 監視のみ(更新なし) | false |
TCP-Proxy 設定と負荷分散
HAProxy による負荷分散
複数のMinecraftサーバーを効率的に管理するには、TCP-Proxyを使用した負荷分散が重要です。
haproxy:
image: haproxy:2.8
container_name: minecraft_proxy
ports:
- "25565:25565"
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
depends_on:
- survival
- creative
- minigames
restart: unless-stopped
HAProxy設定ファイル
global
daemon
defaults
mode tcp
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend minecraft_frontend
bind *:25565
default_backend minecraft_servers
backend minecraft_servers
balance roundrobin
server survival survival:25565 check
server creative creative:25566 check
server minigames minigames:25567 check
.env 共有設定とセキュリティ
環境変数の一元管理
# .env ファイル
MINECRAFT_VERSION=1.20.4
MEMORY_LIMIT=2G
MAX_PLAYERS=50
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
MYSQL_ROOT_PASSWORD=secure_password_here
MYSQL_DATABASE=minecraft_db
MYSQL_USER=minecraft_user
MYSQL_PASSWORD=another_secure_password
重要
.envファイルは機密情報を含むため、.gitignoreに追加し、適切な権限設定(chmod 600)を行ってください。
完全なDocker-Compose構成
メインのdocker-compose.yml
version: '3.8'
services:
# Velocity プロキシサーバー
velocity:
image: itzg/bungeecord
container_name: minecraft_velocity
environment:
TYPE: VELOCITY
MEMORY: 512m
ports:
- "25565:25577"
volumes:
- ./velocity:/server
restart: unless-stopped
# サバイバルサーバー
survival:
image: itzg/minecraft-server
container_name: minecraft_survival
environment:
EULA: "true"
TYPE: PAPER
VERSION: ${MINECRAFT_VERSION}
MEMORY: ${MEMORY_LIMIT}
MAX_PLAYERS: ${MAX_PLAYERS}
MOTD: "§aSurvival Server"
LEVEL: survival_world
DIFFICULTY: normal
GAMEMODE: survival
PVP: "true"
ONLINE_MODE: "false"
volumes:
- ./survival:/data
restart: unless-stopped
depends_on:
- mysql
# クリエイティブサーバー
creative:
image: itzg/minecraft-server
container_name: minecraft_creative
environment:
EULA: "true"
TYPE: PAPER
VERSION: ${MINECRAFT_VERSION}
MEMORY: ${MEMORY_LIMIT}
MAX_PLAYERS: ${MAX_PLAYERS}
MOTD: "§bCreative Server"
LEVEL: creative_world
DIFFICULTY: peaceful
GAMEMODE: creative
PVP: "false"
ONLINE_MODE: "false"
volumes:
- ./creative:/data
restart: unless-stopped
# データベースサーバー
mysql:
image: mysql:8.0
container_name: minecraft_mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- ./mysql:/var/lib/mysql
restart: unless-stopped
ports:
- "3306:3306"
# 自動アップデート
watchtower:
image: containrrr/watchtower
container_name: minecraft_watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Tokyo
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_POLL_INTERVAL=3600
- WATCHTOWER_NOTIFICATIONS=discord
- WATCHTOWER_NOTIFICATION_URL=${DISCORD_WEBHOOK_URL}
restart: unless-stopped
運用とメンテナンス
起動と停止コマンド
# 全サーバーの起動
docker-compose up -d
# 特定のサーバーのみ起動
docker-compose up -d survival
# 全サーバーの停止
docker-compose down
# ログの確認
docker-compose logs -f survival
バックアップスクリプト
#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/minecraft_${DATE}"
mkdir -p ${BACKUP_DIR}
cp -r ./survival ${BACKUP_DIR}/
cp -r ./creative ${BACKUP_DIR}/
cp -r ./velocity ${BACKUP_DIR}/
tar -czf ${BACKUP_DIR}.tar.gz ${BACKUP_DIR}
rm -rf ${BACKUP_DIR}
echo "Backup completed: ${BACKUP_DIR}.tar.gz"
トラブルシューティング
よくある問題と解決方法
問題 | 原因 | 解決方法 |
---|---|---|
サーバーが起動しない | メモリ不足 | MEMORY設定を確認し、適切な値に変更 |
プレイヤーが接続できない | ポート開放問題 | ファイアウォール設定を確認 |
自動アップデートが動作しない | watchtower設定問題 | Docker sockのマウントを確認 |
パフォーマンス最適化
JVMチューニング
JVM_OPTS: >-
-Xms2G -Xmx2G
-XX:+UseG1GC
-XX:+ParallelRefProcEnabled
-XX:MaxGCPauseMillis=200
-XX:+UnlockExperimentalVMOptions
-XX:+DisableExplicitGC
-XX:+AlwaysPreTouch
-XX:G1NewSizePercent=30
-XX:G1MaxNewSizePercent=40
-XX:G1HeapRegionSize=8M
-XX:G1ReservePercent=20
-XX:G1HeapWastePercent=5
-XX:G1MixedGCCountTarget=4
-XX:InitiatingHeapOccupancyPercent=15
-XX:G1MixedGCLiveThresholdPercent=90
-XX:G1RSetUpdatingPauseTimePercent=5
-XX:SurvivorRatio=32
-XX:+PerfDisableSharedMem
-XX:MaxTenuringThreshold=1
FAQ よくある質問
Q: watchtowerの更新頻度はどのくらいが適切ですか?
A: 本番環境では1日1回(深夜2時頃)、開発環境では1時間に1回程度が推奨されます。頻繁すぎると不安定になる可能性があります。
Q: 複数のサーバーで同じワールドを共有できますか?
A: 直接的な共有はできませんが、プラグインを使用してデータベース経由でプレイヤーデータを同期することは可能です。
Q: メモリ使用量を最適化する方法は?
A: JVMオプションの調整、不要なプラグインの削除、チャンクローディングの最適化が効果的です。
おすすめのMinecraftサーバー比較
Docker-Composeでマルチサーバーを構築する際は、適切なVPSサービスの選択が重要です。以下に主要なサービスを比較しました:
XServer VPS for Game
ゲーム専用に最適化されたVPSサービス。Minecraftサーバー構築が簡単で、高性能なCPUとSSDを標準装備。
- 2GB~64GBメモリ
- 高速SSD標準装備
- Docker環境構築サポート
LOLIPOP! for Gamers
ゲーマー向けに特化したロリポップのVPSサービス。コストパフォーマンスに優れ、初心者にも優しい管理画面。
- 月額500円から
- 直感的な管理画面
- 24時間サポート
※本記事は2025年7月時点の情報に基づいて執筆されています。内容の正確性には万全を期していますが、最新情報は各公式サイトをご確認ください。