はじめに(読み飛ばしていいです)
Herokuを使っているとPostgreSQLをよく使います。HerokuではPostgreSQLのデータベースが無料で使えるからです。MySQLを使っている人もいるでしょう。
僕は個人開発ではDockerやVagrantのようなものを使っていません。ローカルに直接PHPやPython、Rubyなどをインストールして開発しています。最近えはpyenvやrbenvのような、ローカル環境のrubyやpythonのバージョンを簡単に変更できるからです。Dockerなどを導入してもいいのですが、セットアップが面倒です。Localのほうがbrewやaptでインストールしてすぐに開発に取り掛かれるので身軽です。
しかしここで結構困ることが多いのがDBです。PCによってPostgreSQLやMySQLのバージョンが違ったりなどすると面倒です。複数のプロジェクトでローカルのMySQLを使いまわしていると「こっちのプロジェクトはMySQL5.6で、こっちは5.7、こっちは8」のような状況になかなか対応できなくなってきます。
そこで、DB部分だけDockerを利用するようにします。今回はPostgreSQLを利用して、僕が開発しているプロダクトである「LGTMoon」のローカル開発環境のデータベースをDockerに置き換えたいと思います。
docker-compose.yml(ここから読んだらいいです)
ここまで長々と書きましたがやり方は簡単で、
- docker-compose.yml を書く
- dockerコンテナを立ち上げる
- psqlで接続する
だけです。
今回はPostgreSQLを使うことを考えます。docker-compose.ymlを以下のようにします。
postgresql: image: postgres:10.5 container_name: postgresql ports: - 5432:5432 volumes: - ./postgres/init:/docker-entrypoint-initdb.d environment: POSTGRES_USER: root POSTGRES_PASSWORD: root POSTGRES_INITDB_ARGS: "--encoding=UTF-8" hostname: postgres restart: always user: root
今回は postgres 10.5 が入っているイメージを利用しています。environemntで POSTGRES_USER
と POSTGRES_PASSWORD
を指定していますが、これがローカルDBに接続するときのユーザー名とパスワードになります。user
はpostgresqlを起動するlinuxユーザーの名前です。特にこだわりがなければ POSTGRES_USER
と同じでいいでしょう。
ports: - 5432:5432
この部分はローカルの5432ポートに来た接続をこのdockerコンテナの5432ポートに飛ばすようにしています。5432はPostgreSQLの標準のポート番号です。もしすでにローカル環境にpostgresqlが立ち上がっていると5432ポートは利用できなくなってしまうので、ローカルのpostgresqlを止めるか、 55432:5432
のようにローカルのポート番号を変えるといいでしょう。ローカルのポート番号を変えた場合は、アプリケーションの設定を変更したり、psqlのコマンド時にポート指定によって、55432
の方のポートに接続することを明示的にする必要があるので気をつけてください。
dockerを起動します。
docker-compose up -d
接続します。注意点としては、localhost
だと繋がりません。ちゃんとIPで書く必要があります。
psql -U root -h 127.0.0.1
完了しました。
LGTMoonの場合
ここから、データベースを作成したあとマイグレーションのSQLを流します。Dockerを立ち上げた状態で
createdb lgtmoon -O postgres -U postgres -h 127.0.0.1 psql -U postgres -h 127.0.0.1 lgtmoon < sql/create.sql
こんな感じで lgtmoonデータベースを作成してsqlを流し込むことができます。
失敗から学ぶRDBの正しい歩き方 (Software Design plus)
- 作者:曽根 壮大
- 発売日: 2019/03/06
- メディア: 単行本(ソフトカバー)