Myログ

自分のためのブログ。

Docker上のCentOSからPostgreSQLに接続する検証

Docker上のCentOSからPostgreSQLに接続する検証

Dockerホスト側の設定

Dockerホストの設定
yum install -y docker
service docker start
docker pull centos:centos7
docker run -i -t centos /bin/bash
Dockerコンテナ上の設定
yum localinstall -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-ami201503-96-9.6-2.noarch.rpm
yum install -y postgresql96 postgresql96-server postgresql96-libs postgresql96-contrib
#DBサーバをIP or ホスト名を指定
DB_HOST=
PG_USER_NAME=devuser
PG_PASSWORD=password
PG_PORT=5432
PG_DB=sample
#SSLモードでの接続
/usr/pgsql-9.6/bin/psql "postgres://${PG_USER_NAME}:${PG_PASSWORD}@${DB_HOST}:${PG_PORT}/${PG_DB}?sslmode=require"
#接続しているユーザーを確認
select session_user;

PostgreSQL側の設定

EC2インスタンスのセキュリティグループの設定

セキュリティグループで以下のルールを追加する
インバウンド
5432 DockerホストのパブリックIPアドレス/32

PostgreSQLのインストール
yum localinstall -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-ami201503-96-9.6-2.noarch.rpm
yum install -y postgresql96 postgresql96-server postgresql96-libs postgresql96-contrib
PostgreSQLの初期化
/etc/init.d/postgresql-9.6 initdb
/etc/init.d/postgresql-9.6 start
SSLに対応するため証明書などを作成
cd /var/lib/pgsql/9.6/data
openssl genrsa -out server.key 1024
openssl req -new -key server.key -x509 -days 365 -out server.crt
chmod 600 server.*
chown postgres:postgres server.key server.crt
postgresユーザーにパスワードを設定
su - postgres
psql
alter role postgres with password 'password';
\q
設定ファイルの編集

postgresql.conf
/var/lib/pgsql/9.6/data/postgresql.conf

listen_addresses = '*'
port = 5432
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'

pg_hba.conf
/var/lib/pgsql/9.6/data/pg_hba.conf

#TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5
再起動
/etc/init.d/postgresql96 restart
接続確認
su - postgres
createuser -P devuser
psql
\du
\q
データベース作成
psql
\dp
create database sample;
\l
テーブルの作成
\connect sample
CREATE TABLE table1(id int, nick_name character varying(5));
\dt
GRANT SELECT, INSERT, UPDATE, DELETE ON table1 TO devuser;
psql postgres devuser