開発環境のRailsのDBをboot2dockerのMySQLにしてみる


Railsの開発環境において、DBをsqliteからboot2docker&dockerで起動したMySQLに変更してみます。

![6394678.png](https://qiita-image-store.s3.amazonaws.com/0/4943/b9c95624-f1dc-cda0-d77a-74888018e1ff.png "6394678.png")

## Environment

+ OSX Ysemite 10.10.1
+ VirtualBox 4.3.20
+ boot2docker 1.4.1


## Install VirtualBox

VirtualBoxがインストールされていない場合は、以下よりダウンロードします。
執筆時点では最新版は4.3.20でした。

https://www.virtualbox.org/


## Install boot2docker

以下より boot2docker.pkg をダウンロードしてインストールします。
執筆時点では最新版は1.4.1でした。

https://github.com/boot2docker/osx-installer/releases


### Setup boot2docker

boot2dockerを初期化します。

```Shell
$ boot2docker init
Latest release for boot2docker/boot2docker is v1.4.1
Downloading boot2docker ISO image...
Success: downloaded
```

boot2dockerを起動します。

内部では、VirtualBox上でboot2dockeイメージを起動しています。


```Shell
$ boot2docker up
Waiting for VM and Docker daemon to start...
..........................oooooooooooooooooooooo
Started.
 
    export DOCKER_CERT_PATH=/Users/suiseyy/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1
    export DOCKER_HOST=tcp://192.168.59.103:2376
```

以下のようにexport設定を、bashやzshのrcやprofileに記述します。
IPの部分は動的に取得するようにしました。


```Shell
$ vi ~/.zprofile

## Boot2Docker
export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2376
export DOCKER_CERT_PATH=/Users/susieyy/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1
```

### Hello World!

動作確認を行います。
Hello Worldが表示されました。

```Shell
$ docker run ubuntu echo "Hello World"
....
Hello World
```

### Stop boot2docker

VirtualBox上でboot2dockeイメージを停止する場合以下のコマンでを実行します。

```Shell
$ boot2docker down
```

### Version

```Shell
$ boot2docker version
Boot2Docker-cli version: v1.4.1
Git commit: 43241cb
```




## Install MySQL


### Download MySQL

[OFFICIAL REPO MySQL](https://registry.hub.docker.com/_/mysql/)イメージをダウンロードします。

```Shell
$ docker pull mysql
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mysql               latest              a385835786ac        9 days ago          236 MB
```

#### REF

Official Imagesは以下から探せます。

https://registry.hub.docker.com/search?page=1&q=library&f=official


### Start MySQL Container 

MySQLを起動します。PORTをホストの13306にマッピングします。
`mysql-server`は任意の名前です。
`mysecretpassword`は任意のパスワードです。

```Shell
$ docker run --name mysql-server -p 13306:3306 -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql -p 13306:3306
$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                     NAMES
7c4ece504bf3        mysql:latest        "/entrypoint.sh mysq   3 seconds ago       Up 3 seconds        0.0.0.0:13306->3306/tcp   mysql-server
```

接続テストをします。

```Shell
$ mysql -u root -h $(boot2docker ip) --port 13306 -p
Enter password:
....
mysql>
```

接続できました。


### Stop MySQL Container

MySQLコンテナを停止する場合は以下のコマンドを実行します。

```Shell
$ docker stop mysql-server
```

## Connect by Rails

今回の本筋ではないですが、`dotenv`を利用して設定値を記述しました。
Gemfileに以下追記します。

```Gemfile
gem 'dotenv'
gem 'mysql2'
```

```Shell
$ bundle install --path vendor/bundle
```

MySQL Containerに接続するように、`.env`と`database.yml`を記述します。

```.env
DB_HOST=$(boot2docker ip)
DB_PORT=13306
DB_USER=root
DB_PASSWORD=mysecretpassword
```

```config/database.yml
development:
  adapter: mysql2
  encoding: utf8
  database: your_database_name
  host: <%= ENV['DB_HOST'] %>
  port: <%= ENV['DB_PORT'] %>
  username: <%= ENV['DB_USER'] %>
  password: <%= ENV['DB_PASSWORD'] %>
```