はじめに
PostgreSQLを使用した開発をするにあたり、
- ローカルにインストールしたくない
- でも、Vagrantもいや
- どうせならDocker使おう
と思ったので、Dockerで開発環境を構築する手順をまとめました。
ザクザク行けば、10分でログインしてSQLを発行するところまでいけると思います。
※Docker自体のインストールはDockerをMacにインストールするをご覧ください。
PostgreSQLを起動する
$docker run -d --name {コンテナ名} -e POSTGRES_PASSWORD={スーパユーザのパスワード} -p {コンテナへフォワードするホストのポート:フォワード先のコンテナのポート} postgres{:バージョン(指定しなければ最新)}
でイメージからコンテナを立ち上げることができます。
(ローカルにイメージがない場合はDocker Hubから取得してくれます。)
今回は
- コンテナ名に
postgres
- スーパユーザのパスワードに
test
- ポートフォワードは
5432:5432
(つまり、同じポート番号でホストとコンテナを繋ぐ) - バージョンは指定せずに最新
としました。
$docker run -d --name postgres -e POSTGRES_PASSWORD=test -p 5432:5432 postgres
Unable to find image 'postgres:latest' locally
latest: Pulling from library/postgres
ef0380f84d05: Pull complete
50cf91dc1db8: Pull complete
d3add4cd115c: Pull complete
467830d8a616: Pull complete
089b9db7dc57: Pull complete
6fba0a36935c: Pull complete
81ef0e73c953: Pull complete
338a6c4894dc: Pull complete
15853f32f67c: Pull complete
044c83d92898: Pull complete
17301519f133: Pull complete
dcca70822752: Pull complete
cecf11b8ccf3: Pull complete
Digest: sha256:1364924c753d5ff7e2260cd34dc4ba05ebd40ee8193391220be0f9901d4e1651
Status: Downloaded newer image for postgres:latest
aeb38b69100e3c6956d682367d50c959e511084b6ef64467fc208e7feb536d6a
余談:バージョンを指定することもできます
上記の方法だと、最新版が入りますが、もちろんバージョンを指定することもできます。
例) 9.5系を指定する場合、末尾に :9.5
と付けます。
(NAMESはお好きなもので大丈夫です。今回は postgres95
と指定しました。)
$docker run -d --name postgres95 -e POSTGRES_PASSWORD=test -p 5432:5432 postgres:9.5
これだけです。簡単!
起動を確認する
docker container ls
で立ち上がっているか確認する。
$docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aeb38b69100e postgres "docker-entrypoint..." 4 days ago Up 4 minutes 0.0.0.0:5432->5432/tcp postgres
いい感じ!
ログインする
$docker exec -ti {NAMES} bash
でDockerコンテナにログインできます。
今回だとNAMESにはpostgres
を指定していました。それでは、早速入ってみましょう。
$docker exec -ti postgres bash # ログイン
root@aeb38b69100e:/# psql --version # バージョンを確認
psql (PostgreSQL) 9.6.3
root@aeb38b69100e:/# psql -U postgres # スーパーユーザでPostgreSQLにログイン
psql (9.6.3)
Type "help" for help.
postgres=# create database test; # 試しにデータベース `test`を作成
CREATE DATABASE
おわりに
いかがでしたでしょうか。DockerはVagrantと比べてサクっと立ち上げられるところが利点ですね。
次はDockerで立ち上げたサーバ同士で通信するところまで行ってみようと思います。