【Windows】DockerでPostgreSQLを構築しよう

ITスキル

DockerでPostgreSQLをインストールするのはとても簡単!

データベースを学習できる環境があっという間にできちゃいます

PostgreSQLインストール

PostgreSQLはDockerのOfficial Imageから取得できます

インストール済みの「Docker Desktop」を起動します
Dockerインストール手順はこちら

次にコマンドプロンプトを起動し、以下のコマンドを実行します

> docker pull postgres

イメージが取得できていることを確認

> docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
postgres     latest    b0b90c1d9579   5 weeks ago   425MB

以下のコマンドで、コンテナを作成・実行します

> docker run --name test-postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres

※セキュリティ警告が出るかもしれませんが、「許可」を選択して下さい

起動できたことを確認します

> docker ps -a
CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS         PORTS                    NAMES
c29d13daaf7a   postgres   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:5432->5432/tcp   test-postgres ★こんな表示が出ていればOK!

各オプションの説明↓

–name [コンテナ名]コンテナの名前を指定します
-e POSTGRES_PASSWORD=[パスワード]postgresユーザのパスワードを指定します
postgresユーザは、初期設定で自動で作成されるユーザです
パスワードを指定しない場合、この部分を
「-e POSTGRES_HOST_AUTH_METHOD=trust」にします
-dコンテナをバックグラウンドで実行し、
コンソールにはコンテナIDを表示します
-p 5432:5432ポート番号を指定します
ポート番号を5432から変更する場合、:の左側に
任意の番号を指定して下さい

PostgreSQLを使ってみる

データベースを作成

以下のコマンドを実行してデータベースを作成します

> docker exec -ti test-postgres createdb -U postgres test

これで、「test」という名前のデータベースを作成できました
確認してみましょう

> docker exec -ti test-postgres psql -U postgres test

作成したデータベースに接続できました!

psql (16.1 (Debian 16.1-1.pgdg120+1))
Type "help" for help.

test=#

試しに触ってみましょう

(test DB に接続した状態で)以下のSQLを入力しEnterを押すと、bookテーブルが作成できます

CREATE TABLE book(
 book_id integer NOT NULL,
 book_title text NOT NULL
);

作成できたことを確認します

\d book

↓以下が出力されればOK!
                  Table "public.book"
   Column   |  Type   | Collation | Nullable | Default
------------+---------+-----------+----------+---------
 book_id    | integer |           | not null |
 book_title | text    |           | not null |

データベースから出る時は以下のコマンドを打ち込みEnterを押します

\q

コンテナを停止するコマンド

> docker stop test-postgres

コンテナを起動するコマンド

> docker start test-postgres

要らなくなったコンテナを廃棄する場合は、以下を実行して下さい

> docker rm -f test-postgres

※「-f」は実行中のコンテナを廃棄する場合に付けてください。停止しているコンテナを廃棄する場合は不要です

docker-compose を使って起動・データベース初期化する方法

docker-compose を使って、もっと少ない手順でデータベースを起動・初期化することもできます

まず、任意のフォルダで以下をコピーして「docker-compose.yml」を作成します

version: '3'
services:
  postgres:
    container_name: test-postgres
    image: postgres
    restart: always
    ports: 
      - "5432:5432"
    volumes:
      - ./postgres/init:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_PASSWORD: "postgres"

docker-compose.ymlを配置したフォルダに、「postgres/init」フォルダを作成し、initフォルダに初期化用のSQLファイル(ここではinit.sqlとします)を作成します

-- DB作成
CREATE DATABASE test;
--DB接続
\c test;
-- 初期投入
DROP TABLE IF EXISTS book;
CREATE TABLE book(
 book_id integer NOT NULL,
 book_title text NOT NULL
);

完成後はこんな感じのディレクトリ構成になります

[任意のフォルダ]
 |_docker-compose.yml
  |_postgres
    |_init
       |_init.sql

任意のフォルダに移動します

> cd [任意のフォルダ]

以下のコマンドを実行すると、docker-composeの設定内容が自動で実行されます。これでデータベースの初期化完了です

> docker-compose up -d

docker ps でコンテナが作られているか確認してみましょう

> docker ps -a
CONTAINER ID   IMAGE      COMMAND                   CREATED          STATUS         PORTS                    NAMES
5222c32e6894   postgres   "docker-entrypoint.s…"   13 seconds ago   Up 9 seconds   0.0.0.0:5432->5432/tcp   test-postgres

データベースに接続すると、init.sqlに書いたデータベースやテーブルが作成できていることも確認できます

docker-composeを使えば、コンテナ廃棄後も何度でも同じデータベースを再構成することが可能になります

停止する場合は以下のコマンドを実行します

> docker-compose stop

コンテナを廃棄する場合は以下のコマンドを実行します
※docker-compose.ymlは削除されません

> docker-compose down

コメント

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