PostgreSQL用Docker環境についてメモ書き。
概要
PostgreSQLを検証するためのDocker環境設定。
前提条件:DockerHubからPostgreSQLのイメージをダウンロードしている事。
dockerfile
以下dokerイメージビルド用のdockerfileを作成。
デフォルトだとvimがインストールされていない。コンフィグファイル変更用にvimをインストールする。
OSがalpineなので、パッケージのインストールにapkコマンドを使う。RUNで指定。
FROM postgres:13.9-alpine3.17
ENV LANG ja_JP.utf8
RUN apk update && apk add vim
docker-compose.yaml
dockerイメージ起動用のdocker-compose.yamlを作成。
dockerfileは同じディレクトリに保存するので、buildにカレントディレクトリを示す「.」を指定。
データはコンテナを停止しても残したい。PostgreSQLデータディレクトリ「/var/lib/postgresql/data」内のファイルが消えないよう、ローカルの「data」ディレクトリをマウントする。volumesで指定。
version: '3'
services:
db:
build: .
ports:
- 5433:5432
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testp@ssword
環境設定用のパラメータとして以下を指定。
パラメータ | 説明 |
---|---|
POSTGRES_USER | PostgreSQLの管理ユーザ名を指定。管理ユーザと共に同名のデータベースが作成される。 |
POSTGRES_PASSWORD | 管理ユーザ用のパスワード。イメージ作成で必要。 |
コンテナ初回起動
docker-compose.yamlがあるディレクトリで以下コマンドを実行。
初回実行なので「–build」オプションを付ける。
% docker-compose up -d --build
コンテナが起動した事を確認。
% docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d79d4f2bf032 postgresql_db "docker-entrypoint.s…" 15 seconds ago Up 11 seconds 0.0.0.0:5433->5432/tcp, :::5433->5432/tcp postgresql_db_1
コンテナに接続
docker-compose execコマンドでコンテナに接続。
接続後、dockerfileで指定したvimがインストールされている事を確認。
% docker-compose exec db bash
# which vim
/usr/bin/vim
POSTGRES_USERパラメータで指定した管理ユーザを使用し、PostgreSQLにログインできる事を確認。
# psql -U testuser
psql (13.9)
Type "help" for help.
テーブルを作成し、データを投入。
testuser=# create table test_table(int integer,str varchar(100));
CREATE TABLE
testuser=# insert into test_table(int,str) values(1,'test');
INSERT 0 1
testuser=# select * from test_table;
int | str
-----+------
1 | test
(1 row)
コンテナ停止
exitコマンドでPosgtreSQLとコンテナからログアウト。
testuser=# exit
# exit
exit
コンテナを停止する。
% docker-compose down
Stopping postgresql_db_1 ... done
Removing postgresql_db_1 ... done
Removing network postgresql_default
コンテナ起動
コンテナを再度起動し、コンテナに再接続。
% docker-compose up -d
Creating network "postgresql_default" with the default driver
Creating postgresql_db_1 ... done
% docker-compose exec db bash
データベースにデータが残っている事を確認。
# psql -U testuser
psql (13.9)
Type "help" for help.
testuser=# \dt
List of relations
Schema | Name | Type | Owner
--------+------------+-------+----------
public | test_table | table | testuser
(1 row)
testuser=# select * from test_table;
int | str
-----+------
1 | test
(1 row)
コメント