DockerコンテナからローカルホストのPostgreSQLデータベースに接続する方法
DockerコンテナからローカルホストのPostgreSQLデータベースに接続する方法
このチュートリアルでは、DockerコンテナからローカルホストのPostgreSQLデータベースに接続する方法について解説します。
環境
- Ubuntu 20.04
- Docker Desktop 20.10.11
- PostgreSQL 14
手順
- PostgreSQLサーバーをインストール
sudo apt update
sudo apt install postgresql-server
- PostgreSQLデータベースを作成
sudo -u postgres psql
postgres=# CREATE DATABASE my_database;
- Dockerfileを作成
FROM postgres:14
ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD password
ENV POSTGRES_DB my_database
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/14/main/pg_hba.conf
- Dockerイメージをビルド
docker build -t postgresql .
- Dockerコンテナを起動
docker run -it --rm --name postgresql -p 5432:5432 postgresql
- コンテナからデータベースに接続
docker exec -it postgresql psql -U postgres -W -h localhost my_database
接続確認
psql (14.5)
Type "help" for help.
my_database=> \q
補足
ENV
ディレクティブは、コンテナ内で環境変数を設定するために使用されます。pg_hba.conf
ファイルは、PostgreSQLデータベースへの接続を許可するホストとユーザーを指定するために使用されます。-p
フラグは、コンテナのポートとホストのポートをマッピングするために使用されます。-W
フラグは、パスワードプロンプトを表示せずにデータベースに接続するために使用されます。
注意事項
- このチュートリアルは、基本的な接続方法を説明するものです。本番環境で使用するには、セキュリティ対策を講じる必要があります。
- PostgreSQLの設定は、バージョンによって異なる場合があります。詳細は公式ドキュメントを参照してください。
FROM postgres:14
ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD password
ENV POSTGRES_DB my_database
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/14/main/pg_hba.conf
CMD ["postgres", "-D", "/var/lib/postgresql/data"]
接続テスト
# コンテナ起動
docker run -it --rm --name postgresql -p 5432:5432 postgresql
# コンテナ内に入り、データベースに接続
docker exec -it postgresql psql -U postgres -W -h localhost my_database
# データベース操作
my_database=> SELECT * FROM users;
# 接続切断
my_database=> \q
# コンテナ停止
docker stop postgresql
Docker Compose
複数のコンテナを連携させる場合は、Docker Composeを使うと便利です。
version: "3"
services:
app:
build: .
ports:
- "8000:8000"
depends_on:
- postgresql
postgresql:
image: "postgres:14"
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "password"
POSTGRES_DB: "my_database"
コマンド
# コンポーザーの起動
docker-compose up -d
# 接続テスト
docker exec -it app psql -U postgres -W -h postgresql my_database
# コンテナ停止
docker-compose down
PostgreSQL に接続する他の方法
psql コマンドラインツール
psql は PostgreSQL 公式のクライアントツールです。コマンドラインからデータベースに接続して操作できます。
psql -U postgres -W -h localhost my_database
pgAdmin4 は PostgreSQL データベースを管理するための GUI ツールです。
DBeaver は汎用的なデータベース管理ツールです。PostgreSQL だけでなく、MySQL や Oracle などのデータベースにも接続できます。
Sequel Pro は Mac 用の PostgreSQL データベース管理ツールです。
接続方法の選択
- コマンドライン操作に慣れている場合は、psql コマンドラインツールがおすすめです。
- GUI ツールの方が使いやすい場合は、pgAdmin4 や DBeaver などのツールを使うと便利です。
- 上記の方法を使用する場合は、PostgreSQL サーバーの設定を確認する必要があります。
- セキュリティ対策を講じて、安全に接続するようにしてください。
- Docker は、コンテナ化技術を用いて PostgreSQL サーバーを簡単に起動・停止できるというメリットがあります。
- 他の方法は、Docker を使用しない方法です。
postgresql docker ubuntu