Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

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を初期化します。

$ 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は以下から探せます。

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

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に接続するように、.envdatabase.ymlを記述します。

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'] %>
susieyy
フリーランス - スタートアップエンジニアリングアドバイザー - iOS技術顧問 - プロトタイプ開発
https://susieyy.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした