最新のPostgreSQLをdockerでインストールしてみる

最新のPostgreSQLをdockerでインストールしてみる

まずは起動&接続

インストール&起動確認。

$ docker run -d --name postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres
Unable to find image 'postgres:latest' locally
latest: Pulling from library/postgres
f2aa67a397c4: Pull complete
8218dd41bf94: Pull complete
e9b7fa2e6bd8: Pull complete
7288a45ee17f: Pull complete
0d0f8a67376c: Pull complete
972b115243de: Pull complete
d38528c83dd1: Pull complete
9be166d23dee: Pull complete
12015b5ceae7: Pull complete
363876c09ce9: Pull complete
b810ba8b2ac0: Pull complete
e1ee11d636cf: Pull complete
50d32813cba1: Pull complete
4f0109485c03: Pull complete
Digest: sha256:c604b88af0e7adbe45cd2b9c329479c7a5305bd88da37d4806dcc56ab5a31d42
Status: Downloaded newer image for postgres:latest
2699970000ffe6b0a6bb5096a008e7a66033a5b12c9cadee6e3837912b9bc58a

仮想マシンの稼動状態とIPアドレスを確認します。

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2699970000ff        postgres            "docker-entrypoint.s…"   19 seconds ago      Up 17 seconds       0.0.0.0:5432->5432/tcp   postgres

$ docker-machine.exe ip
192.168.99.100

これでPgAdmin4を利用して接続することが可能です。コンテナの起動状態は

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                    NAMES
def74495f9f0        postgres            "docker-entrypoint.s…"   12 minutes ago      Exited (0) 8 minutes ago                            blissful_tereshkova
2699970000ff        postgres            "docker-entrypoint.s…"   36 minutes ago      Up 6 minutes               0.0.0.0:5432->5432/tcp   postgres

で確認でき、起動・停止・削除は

$ docker start names or container id
$ docker stop names or container id
$ docker rm names or container id

で行える。

複数のコンテナをまとめる

プロジェクトを構成するアーキテクチャは複数のコンテナで構成します。そのため、その構成を管理するためのDockerの仕組みを使ってみたいと思います。

$ mkdir ~/vm
$ mkdir ~/vm/test
$ vim ~/vm/test/docker-compose.yml
# docker-compose.ymlを編集する
services:
    db:
        image: postgres
        environment:
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD: postgres
        ports:
            - "5432:5432"
        volumes:
            - asp-db:/var/lib/postgresql/data
            - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d

volumes:
    asp-db:

$ docker-compose up -d
Creating volume "asp_asp-db" with default driver
Creating asp_db_1 ... done

# 停止するとき
$ docker-compose stop
# 停止後のあれこれ
# 仮想マシンの状態
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ce77009b60a postgres "docker-entrypoint.s…" 4 minutes ago Exited (137) 54 seconds ago asp_db_1
# DB用に作ったボリューム
$ docker volume ls
DRIVER VOLUME NAME
local asp_asp-db

ローカルディスク上の./docker-entrypoint-initdb.dにsqlを入れておくと最初だけ実行してくれるようです(親切)。
また、本気の開発が始まった場合は、docker-compose up -dのみで開発が可能になるようにします。

ソリューション開発室カテゴリの最新記事