PostgreSQLの公式Dockerイメージの使い方

2019-07-07 2019-07-07

PostgreSQLの公式Dockerイメージを使ってみます。
以下のことをやってみます。ここではデータの永続化は行わず、コンテナを起動して削除するだけなので、PostgreSQLに登録したデータはコンテナ削除後に消えます。

  1. イメージの取得
  2. コンテナの起動
  3. コンテナに接続する
  4. コンテナを削除する

イメージの取得

現在では、PostgreSQLのDockerイメージは11.4がlatestらしい。

$ docker pull postgres:11.4
$ docker images
REPOSITORY          TAG                   IMAGE ID            CREATED             SIZE
postgres            11.4                  6dc0e6af942c        3 days ago          312MB

コンテナを作る

$ docker run --name pg-sample -d \
                -e POSTGRES_PASSWORD=password \
                -e POSTGRES_USER=postgres_test \
                -e POSTGRES_DB=test_db \
                -p 5432:5432 \
                postgres:11.4
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ece0f0456b5d        postgres:11.4       "docker-entrypoint.s…"   7 seconds ago       Up 6

PostgreSQLに接続してみる

psqlコマンドは、作成したコンテナにインストールされているので、docker execでコンテナ上のpsqlコマンドを実行する。
docker runした時に、ホストPC上の5432ポートとコンテナのポートをフォワードしているので、ホストPCからも接続できます。

# コンテナのpsqlで確認
$ docker exec -it pg-sample psql -U postgres_test -l
                                        List of databases
   Name    |     Owner     | Encoding |  Collate   |   Ctype    |        Access privileges

-----------+---------------+----------+------------+------------+---------------------------------
 postgres  | postgres_test | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | postgres_test | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres_test       +
           |               |          |            |            | postgres_test=CTc/postgres_test
 template1 | postgres_test | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres_test       +
           |               |          |            |            | postgres_test=CTc/postgres_test
 test_db   | postgres_test | UTF8     | en_US.utf8 | en_US.utf8 |
(4 rows)

# ホストPCのpsqlで接続(パスワードを聞かれるので、コンテナ起動時に指定したPOSTGRES_PASSWORDの値を入れる)
$ psql -U postgres_test -h localhost -l
Password for user postgres_test:
                                        List of databases
   Name    |     Owner     | Encoding |  Collate   |   Ctype    |        Access privileges
-----------+---------------+----------+------------+------------+---------------------------------
 postgres  | postgres_test | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | postgres_test | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres_test               +
           |               |          |            |            | postgres_test=CTc/postgres_test
 template1 | postgres_test | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres_test               +
           |               |          |            |            | postgres_test=CTc/postgres_test
 test_db   | postgres_test | UTF8     | en_US.utf8 | en_US.utf8 |
(4 rows)

データを登録してみる

コンテナ上のPostgreSQLに簡単なテーブルを作成して、レコードを追加してみます。

$ docker exec -it pg-sample psql -U postgres_test -d test_db
psql (11.4 (Debian 11.4-1.pgdg90+1))
Type "help" for help.

test_db=# create table persons(id integer PRIMARY KEY, name varchar(50));
CREATE TABLE
test_db=# \d persons
                     Table "public.persons"
 Column |         Type          | Collation | Nullable | Default
--------+-----------------------+-----------+----------+---------
 id     | integer               |           | not null |
 name   | character varying(50) |           |          |
Indexes:
    "persons_pkey" PRIMARY KEY, btree (id)
test_db=# insert into persons values (1, '佐藤');
INSERT 0 1
test_db=# insert into persons values (2, '鈴木');
INSERT 0 1
test_db=# insert into persons values (3, '伊藤');
INSERT 0 1
test_db=# select * from persons;
 id | name
----+------
  1 | 佐藤
  2 | 鈴木
  3 | 伊藤
(3 rows)

コンテナの削除

$ docker stop pg-sample
pg-sample
$ docker rm pg-sample
pg-sample

参考

postgres - DockerHub