dockerでなにかやりたい…
現在vagrantを利用しているRailsプロジェクトをまるっと、dockerに載せ替えたい…そう、最初は思っておりました。
ちょっと大変そうだったので、とりあえず今回はDBだけdocker化してみました。
なお備忘録的なものなので、参考にする際には自己責任でお願いします。
環境
mac
既存のRails開発環境があって、DBの環境だけ増やすといった場合を想定しています。
dockerをインストール
正直、ここが一番混乱しました。
なにせmacにdockerを導入する方法が何通りもあり、ベストプラクティスというものがわからない状態だったためです。
多分docker for macを使うのがいいのかもしれないのですが、とりあえず的なものも含めていろいろと参考情報が多かったのでdocker-machine
を使用してみました。
Docker Toolboxのインストール
ここからダウンロード、インストールしてください
https://www.docker.com/products/docker-toolbox
docker-machineでvirtualboxをつくる
$ docker-machine create --driver virtualbox development
作成できたかを確認する
$ docker-machine ls
作成したdevelopment
の情報が表示されていればOKです。
ローカルからdockerコンテナを操作できるようにする
$ eval "$(docker-machine env development)
DB(今回はpostgresql)コンテナを作成する
※バージョン9.3.15を使用する場合
$ docker pull postgres:9.3.15
インストールが完了したら、起動する
postgresqlで使用するポート:5432をポートフォワードします。
$ docker run -d -p 5432:5432 --name postgres postgres:9.3.15
psqlコマンドを使用するときは以下のコマンドを使用します。
$ docker exec -it postgres psql -U postgres
postgresqlにDBを作成(レストア)する
まずはDBを作成します。
$ docker exec -i postgres createdb 作成するDB -U postgres
既存DBからバックアップしてきたデータをレストアします。
$ cat dumpファイル | docker exec -i postgres psql -d 作成したDB -U postgres
docker側での作業は一旦これで完了です。
既存のRailsプロジェクトからdockerのDBに接続する。
Railsのconfig/databases.yml
の設定を変更します。
既存のファイルは適宜バックアップしておいてください。
今回はローカル環境(develop)のみを対象にします。
developmentの部分だけ変更します。
development:
<<: *default
adapter: postgresql
database: 作成したDB
username: postgres
host: XXX.XXX.XXX.XXX ⇐ docker-machine lsで確認できたIPアドレスを設定します。
port: 5432
ファイル内容を変更後、Railsを再起動してください。
以上でRails側の作業も完了です。
感想
こんな感じで、DBだけdockerを使って構築できました。
万が一DBを壊してしまっても、作り直しやすいですし
コンテナ側のIPやポートを調整すれば複数のDB環境を用意できるのかな、と思います。
構築方法についてはdocker-compose
を使うほうが良いのだろうか、、、みたいな感じもしております。