Dockerコンテナ内のPostgreSQLの性能をチューニングする方法
Dockerコンテナ内の PostgreSQL に外部から接続する方法
docker run コマンドのオプションを使う
docker run -it --rm \
-p 5432:5432 \
postgres:latest
上記のコマンドは、PostgreSQLのイメージを起動し、コンテナのポート 5432
をホストのポート 5432
に公開します。
この設定により、ホスト側からは localhost:5432
宛に接続することで、コンテナ内の PostgreSQL にアクセスできます。
環境変数を使う
docker run -it --rm \
-e POSTGRES_PASSWORD=password \
postgres:latest
上記のコマンドは、PostgreSQLのイメージを起動し、環境変数 POSTGRES_PASSWORD
にパスワードを設定します。
この設定により、コンテナ内の PostgreSQL に接続する際に、パスワードとして password
を指定する必要があります。
docker-compose を使う
version: '3'
services:
postgres:
image: postgres:latest
ports:
- "5432:5432"
volumes:
postgres_data:
上記は docker-compose.yml
の例です。この設定により、PostgreSQL のイメージが postgres
という名前のサービスとして起動され、コンテナのポート 5432
がホストのポート 5432
に公開されます。
docker-compose up
コマンドを実行することで、この設定に基づいてコンテナが起動されます。
いずれの方法を使う場合でも、以下の点に注意する必要があります。
- PostgreSQL のバージョンとクライアントのバージョンが一致していること
- ネットワークの設定が正しく行われていること
- ファイアウォールによって接続が遮断されていないこと
接続方法
いずれの方法で接続する場合でも、以下のコマンドを使って接続できます。
psql -h localhost -p 5432 -U postgres -W
-h
: ホスト名-p
: ポート番号-U
: ユーザー名-W
: パスワードの入力
import psycopg2
# コンテナの接続情報
host = "localhost"
port = 5432
database = "postgres"
user = "postgres"
password = "password"
# 接続
conn = psycopg2.connect(
host=host,
port=port,
database=database,
user=user,
password=password,
)
# カーソルを取得
cur = conn.cursor()
# クエリを実行
cur.execute("SELECT * FROM users")
# 結果を取得
rows = cur.fetchall()
# 接続を閉じる
cur.close()
conn.close()
# 結果を表示
for row in rows:
print(row)
このコードを実行するには、以下のライブラリをインストールする必要があります。
pip install psycopg2
実行方法
- 上記のコードを
sample.py
というファイルに保存します。 - 以下のコマンドを実行して、コンテナを起動します。
docker run -it --rm \
-p 5432:5432 \
postgres:latest
python sample.py
- 出力結果を確認します。
(1, 'user1', 'password1')
(2, 'user2', 'password2')
補足
- 上記のコードは、Python 3 で動作確認しています。
- 他の言語でも、同様の方法で接続できます。
Dockerコンテナ内の PostgreSQL に外部から接続するその他の方法
SSH トンネリングを使うと、ローカルマシンとリモートマシンの間で暗号化されたトンネルを作成できます。
このトンネルを使うことで、外部から安全に PostgreSQL に接続できます。
ssh -L 5432:localhost:5432 user@remote_host
上記のコマンドは、ローカルマシンのポート 5432
をリモートマシンのポート 5432
に転送します。
VPN (Virtual Private Network) を使うと、プライベートネットワークに安全に接続できます。
クラウドサービス
Amazon RDS や Google Cloud SQL などのクラウドサービスを使うと、簡単に PostgreSQL を立ち上げることができます。
これらのサービスは、外部からの接続を簡単に設定できるため、便利です。
Dockerコンテナ内の PostgreSQL に外部から接続するには、いくつかの方法があります。
それぞれの方法にはメリットとデメリットがありますので、要件に合わせて最適な方法を選択してください。
postgresql docker remote-connection