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
コメント