ポート設定チュートリアル

一般的なソフトウェアのポート設定を変更し、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"