PostgreSQL用Docker環境設定

Dart用docker環境Docker

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_USERPostgreSQLの管理ユーザ名を指定。管理ユーザと共に同名のデータベースが作成される。
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)

コメント

タイトルとURLをコピーしました