ポート設定チュートリアル
一般的なソフトウェアのポート設定を変更し、Dockerポートマッピングをマスターする方法を学ぶ
一般的なソフトウェアのポート設定
Nginx ポート設定
Nginx のリスニングポートを変更して、他のサービスとの競合を避ける
# nginx.conf ファイルを編集
sudo nano /etc/nginx/nginx.conf
# listen ディレクティブを変更
server {
listen 8080; # デフォルトの80から8080に変更
listen [::]:8080;
server_name _;
# ... その他の設定
}
# Nginx を再起動
sudo systemctl restart nginx
ファイアウォールで新しいポートを開放することを忘れずに:
sudo ufw allow 8080
Apache ポート設定
Apache HTTP サーバーのリスニングポートを変更
# ポート設定ファイルを編集
sudo nano /etc/apache2/ports.conf
# Listen ディレクティブを変更
Listen 8080 # デフォルトの80から8080に変更
# バーチャルホスト設定を編集
sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:8080>
# ... その他の設定
</VirtualHost>
# Apache を再起動
sudo systemctl restart apache2
MySQL ポート設定
MySQL データベースサーバーのリスニングポートを変更
# MySQL 設定ファイルを編集
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# ポート設定を見つけて変更
[mysqld]
port = 3307 # デフォルトの3306から3307に変更
bind-address = 127.0.0.1
# MySQL サービスを再起動
sudo systemctl restart mysql
# 接続時に新しいポートを指定
mysql -u root -p -P 3307
SSH ポート設定
SSH サービスポートを変更してサーバーセキュリティを向上
# SSH 設定ファイルを編集
sudo nano /etc/ssh/sshd_config
# Port 設定を見つけて変更
Port 2222 # デフォルトの22から2222に変更
# SSH サービスを再起動
sudo systemctl restart sshd
# 新しいポートを使用して接続
ssh user@server -p 2222
⚠️ 変更前にファイアウォールで新しいポートが開放されていることを確認してください
Node.js アプリケーションポート設定
Node.js アプリケーションのリスニングポートを設定
# コードでポートを設定
const port = process.env.PORT || 3001;
app.listen(port, () => {
console.log(`Server running on port $${port}`);
});
# 環境変数で起動
PORT=3001 node app.js
# または package.json で設定
{
"scripts": {
"start":"PORT=3001 node app.js",
"dev":"PORT=3001 nodemon app.js"
}
}
Docker ポートマッピング
Docker コンテナのポートマッピング設定を学ぶ
# 単一ポートをマップ
docker run -p 8080:80 nginx
# 複数ポートをマップ
docker run -p 8080:80 -p 8443:443 nginx
# Docker Compose 設定
version: '3.8'
services:
web:
image: nginx
ports:
-"8080:80" # ホスト:コンテナ
-"127.0.0.1:8081:80" # 特定のIPにバインド
実用的なコツとツール
ポート使用状況の検出
ポートが使用されているかチェックする一般的なコマンド
# Linux/macOS ポート使用状況チェック
netstat -tulpn | grep :8080
lsof -i :8080
ss -tulpn | grep :8080
# Windows ポート使用状況チェック
netstat -ano | findstr :8080
Get-NetTCPConnection -LocalPort 8080
# ポートを使用しているプロセスを終了
kill -9 $(lsof -t -i:8080) # Linux/macOS
taskkill /PID <PID> /F # Windows
ファイアウォールポート開放
異なるOSでポートを開放する方法
# Ubuntu/Debian (UFW)
sudo ufw allow 8080
sudo ufw allow 8080/tcp
sudo ufw allow from 192.168.1.0/24 to any port 8080
# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
# iptables
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
# ファイアウォール状態確認
sudo ufw status
sudo firewall-cmd --list-all
ポート転送技術
異なるツールを使用したポート転送
# SSH ポート転送
ssh -L 8080:localhost:80 user@remote-server
ssh -R 8080:localhost:80 user@remote-server # 逆転送
# socat ポート転送
socat TCP-LISTEN:8080,fork TCP:localhost:80
# nginx リバースプロキシ
server {
listen 8080;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# netcat ポート転送
mkfifo backpipe
nc -l 8080 0<backpipe | nc localhost 80 1>backpipe
開発環境ポート管理
開発環境でのポート計画と管理のコツ
# 推奨開発ポート割り当て
3000-3099 # フロントエンド開発サーバー
4000-4099 # バックエンドAPIサービス
5000-5099 # Python/Flaskアプリ
8000-8099 # 汎用Webサービス
9000-9099 # モニタリングとツール
# 環境変数でポートを管理
# .env ファイル例
FRONTEND_PORT=3000
BACKEND_PORT=4000
DATABASE_PORT=5432
REDIS_PORT=6379
# docker-compose.yml で環境変数を使用
services:
frontend:
ports:
-"$${FRONTEND_PORT}:3000"
backend:
ports:
-"$${BACKEND_PORT}:4000"