Railsの開発環境において、DBをsqliteからboot2docker&dockerで起動したMySQLに変更してみます。
Environment
- OSX Ysemite 10.10.1
- VirtualBox 4.3.20
- boot2docker 1.4.1
Install VirtualBox
VirtualBoxがインストールされていない場合は、以下よりダウンロードします。
執筆時点では最新版は4.3.20でした。
Install boot2docker
以下より boot2docker.pkg をダウンロードしてインストールします。
執筆時点では最新版は1.4.1でした。
Setup boot2docker
boot2dockerを初期化します。
$ boot2docker init
Latest release for boot2docker/boot2docker is v1.4.1
Downloading boot2docker ISO image...
Success: downloaded
boot2dockerを起動します。
内部では、VirtualBox上でboot2dockeイメージを起動しています。
$ 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の部分は動的に取得するようにしました。
$ 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が表示されました。
$ docker run ubuntu echo "Hello World"
....
Hello World
Stop boot2docker
VirtualBox上でboot2dockeイメージを停止する場合以下のコマンでを実行します。
$ boot2docker down
Version
$ boot2docker version
Boot2Docker-cli version: v1.4.1
Git commit: 43241cb
Install MySQL
Download MySQL
OFFICIAL REPO MySQLイメージをダウンロードします。
$ docker pull mysql
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mysql latest a385835786ac 9 days ago 236 MB
REF
Official Imagesは以下から探せます。
Start MySQL Container
MySQLを起動します。PORTをホストの13306にマッピングします。
mysql-server
は任意の名前です。
mysecretpassword
は任意のパスワードです。
$ 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
接続テストをします。
$ mysql -u root -h $(boot2docker ip) --port 13306 -p
Enter password:
....
mysql>
接続できました。
Stop MySQL Container
MySQLコンテナを停止する場合は以下のコマンドを実行します。
$ docker stop mysql-server
Connect by Rails
今回の本筋ではないですが、dotenv
を利用して設定値を記述しました。
Gemfileに以下追記します。
gem 'dotenv'
gem 'mysql2'
$ bundle install --path vendor/bundle
MySQL Containerに接続するように、.env
とdatabase.yml
を記述します。
DB_HOST=$(boot2docker ip)
DB_PORT=13306
DB_USER=root
DB_PASSWORD=mysecretpassword
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'] %>