Rails 版 Worker 開発環境 Docker イメージについて
Getting Started や Worker 開発そのものを手軽に試せるように、Rails 版 Worker 開発環境 Docker イメージを公開しています。
Rails 版 Worker 開発環境 Docker イメージは、Rails 版 Worker の開発に必要な環境一式をパッケージングしています。
Docker の実行環境さえあれば、お使いのマシン環境を汚すことなく、気軽に Worker 開発を試せます。
前提環境
Docker 1.8.1 以降がインストールされていることが前提となります。
公開場所
Rails 版 Worker 開発環境 Docker イメージは、Docker Hub の magellan/development-env-rails リポジトリ で公開しています。
Repository | Tag |
---|---|
magellan/development-env-rails | 4.2.6-p2 |
パッケージ内容
OS
項目 | バージョン |
---|---|
Ubuntu | 16.04 LTS |
Ruby on Rails 関連
項目 | バージョン |
---|---|
Ruby | 2.3.1p112 (2016-04-26 revision 54768) |
RubyGems | 2.5.1 |
Bundler | 1.12.5 |
Rails | 4.2.6 |
データベース関連
項目 | バージョン |
---|---|
MySQL | mysql-client 5.7 / libmysqld-dev 5.7.12 |
PostgreSQL | postgresql-client 9.5 / libpq-dev 9.5.3 |
MAGELLAN 関連
項目 | バージョン |
---|---|
libmagellan | 0.2.6 |
magellan-cli | 0.9.1 |
その他
項目 | バージョン |
---|---|
Docker | 1.11.1, build 5604cbe |
エディタ | VIM 7.4.1689 / GNU Emacs 24.5.1 / GNU nano 2.5.3 / Atom 1.7.4 |
git | 2.7.4 |
Node.js | 6.2.0 |
利用方法
Worker 開発環境コンテナをバックグラウンドで起動します。コンテナ起動後に、ログインして利用します。
データベースを利用する場合は、データベースコンテナを先に起動します。
データベースコンテナの起動
データベースを利用しない場合は、次の「Worker 開発コンテナの起動」へ進んでください。Getting Started を試す場合は、必ず MySQL データベースコンテナを起動してください。
Worker 開発環境コンテナは、MySQL と PostgreSQL に対応(ライブラリとクライアントツールをインストール済み)しています。ここでは、MySQL の利用例を示します。
$ docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=s3cret -d mysql
指定した各オプションとその意味は次のとおりです。
--name mysql
(必須)コンテナに、
mysql
という名前を付けています。名前は、自由に付けてかまいません。違う名前をつけた場合は、コンテナ名mysql
の部分は、その名前に読み替えてください。-p 3306:3306
(必須)MySQL のポート番号をデフォルトの
3306
のまま公開しています。ポート番号は、自由に設定してかまいません。書式は、「ホストマシンのポート番号 : コンテナのポート番号」です。-e MYSQL_ROOT_PASSWORD=s3cret
(必須)MySQL の root アカウントのパスワードを
s3cret
に設定しています。パスワードは、自由に設定してかまいません。-d
(必須)コンテナをバックグラウンドで起動します。
データベースコンテナが起動しているかどうかを docker ps
コマンドで確認します。NAMES の欄に、コンテナ名 mysql
と表示されている行があれば成功です。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc338f18608d mysql:latest "/entrypoint.sh mysq About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp mysql
CONTAINER ID、CREATED、STATUS の各値は、お使いの環境ごとに異なります。
Worker 開発環境コンテナの起動
Worker 開発環境コンテナをバックグランンドで起動します。データベースコンテナとの連携やホストマシンとコンテナ間でのファイル共有などいくつかのオプションを指定します。
$ docker run --privileged --name worker-dev --link mysql:mysql -v /path/to/directory:/workspace -p 3000:3000 -d magellan/development-env-rails:4.2.6-p2
指定した各オプションとその意味は次のとおりです。
--privileged
(必須)コンテナを特権モードで起動します。Docker を利用するために必須です。
--name worker-dev
(オプション)コンテナに、
worker-dev
という名前を付けています。名前は、自由に付けてかまいません。省略時には Docker が自動的に他と衝突しない名前を付けます。同じ名前のコンテナが存在する時はそのコンテナが終了状態(
docker ps -a
と-a
オプションをつけてdocker ps
を実行した時のみ表示されます)であってもエラーになるため、あらかじめ同じ名前のコンテナは削除しておく必要があります。以降の説明では、コンテナに
worker-dev
という名前をつけたものとしてコマンドライン例を記述しています。別の名前を付けた場合は、適宜読み替えてください。--link mysql:mysql
(オプション)データベースコンテナとの連携を指定します。データベースを利用しなければ不要です。書式は、「連携するデータベースコンテナ名 : エイリアス名」です。
Worker 開発環境コンテナ内では、エイリアス名で始まる(この例では、
MYSQL
)環境変数で連携したいデータベースコンテナの IP アドレスやポート番号などの情報が参照できます。-v /path/to/directory:/workspace
(オプション)ホストマシンとコンテナ間で、ファイルを共有します。
コンテナ内で作成したファイルやディレクトリは、コンテナを削除すると消えます。コンテナ削除後も作成したファイルやディレクトリを残しておきたい場合は、この共有機能を使います。
Worker 開発環境コンテナでは、ホストマシンとの共有目的で、
/workspace
ディレクトリを用意しています。/path/to/directory
は、コンテナとファイルを共有するためのホストマシン側のディレクトリです。/path/to/directory
は、お使いの環境に合わせて自由に決めてかまいません。あらかじめ準備して、指定してください。-p 3000:3000
(必須)Rails サーバーのポート番号をデフォルトの
3000
のまま公開しています。ポート番号は、自由に設定してかまいません。書式は、「ホストマシンのポート番号 : コンテナのポート番号」です。-d
(必須)コンテナをバックグラウンドで起動します。
Worker 開発環境コンテナが起動しているかどうかをdocker ps
コマンドで確認します。NAMES に、コンテナ名 worker-dev
と表示されている行があれば成功です。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
308f9f3582a0 magellan/development-env-rails:4.2.6-p2 "startup" 5 seconds ago Up 4 seconds 0.0.0.0:3000->3000/tcp worker-dev
cc338f18608d mysql:latest "/entrypoint.sh mysq 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp mysql
CONTAINER ID、CREATED、STATUS の各値は、お使いの環境ごとに異なります。
コンテナ内で参照できる MYSQL
で始まる環境変数は、次のとおりです。値は、オプションの指定内容や環境によって異なります。
$ env | grep MYSQL
MYSQL_ENV_MYSQL_ROOT_PASSWORD=s3cret
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_PORT_3306_TCP=tcp://172.17.0.1:3306
MYSQL_ENV_MYSQL_VERSION=5.6.24
MYSQL_NAME=/worker-dev/mysql
MYSQL_PORT_3306_TCP_PROTO=tcp
MYSQL_PORT_3306_TCP_ADDR=172.17.0.1
MYSQL_ENV_MYSQL_MAJOR=5.6
MYSQL_PORT=tcp://172.17.0.1:3306
Rails アプリケーションの場合は、config/database.yml
の中で、これらの環境変数から必要な情報を参照します。以下は、root アカウントのパスワード(MYSQL_ENV_MYSQL_ROOT_PASSWORD
)と、データベースサーバーのアドレス(MYSQL_PORT_3306_TCP_ADDR
)を取得している例です。
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: <%= ENV['MYSQL_ENV_MYSQL_ROOT_PASSWORD'] %>
host: <%= ENV['MYSQL_PORT_3306_TCP_ADDR'] %>
Worker 開発環境コンテナへのログイン
docker exec
を使って、Worker 開発環境コンテナにログインします。
$ docker exec -it worker-dev su magellan
指定した各オプションとその意味は次のとおりです。
-it
(必須)コマンドラインで対話的に作業することを指定します。
worker-dev
(必須)Worker 開発環境コンテナを指定します。
su magellan
(必須)magellan アカウントでログインします。
magellan アカウントで作業することを前提に、アカウントや
/workspace
ディレクトリを用意しています。
ログイン後、/workspace
ディレクトリに移動します。/workspace
以外で作成したディレクトリやファイルは、コンテナ削除後は残りません。作業場所には、気をつけてください。
$ cd /workspace
Rails アプリを作ってみる
試しに、Rails アプリケーションを作ってみます。
$ rails new trial -B
create
create README.rdoc
create Rakefile
. . . (中略) . . .
create vendor/assets/javascripts/.keep
create vendor/assets/stylesheets
create vendor/assets/stylesheets/.keep
Rails アプリケーションの開発に必要なファイルが生成されました。Rails アプリケーションのルートディレクトリに移動して開発を進めます。
$ cd trial
Gemfile 中でコメントアウトされている therubyracer の行を見つけて、コメントを外してください(# を削除します)。therubyracer は、Google が開発しているオープンソースの JavaScript エンジンである V8 を Ruby から使えるようにする gem パッケージです。これがないと、Web サーバーが起動しません。
(変更前)
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
(変更後)
# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby
bundle
コマンドで、Rails アプリケーションの実行に必要な gem をインストールします。
$ bundle
Fetching gem metadata from https://rubygems.org/............
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies...
. . . (中略) . . .
Bundle complete! 13 Gemfile dependencies, 56 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
Web サーバーを起動して、Rails アプリケーションの動作を確認します。
$ ./bin/rails server -b 0.0.0.0
=> Booting WEBrick
=> Rails 4.2.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2015-08-25 06:31:35] INFO WEBrick 1.3.1
[2015-08-25 06:31:35] INFO ruby 2.2.3 (2015-08-18) [x86_64-linux]
[2015-08-25 06:31:35] INFO WEBrick::HTTPServer#start: pid=1487 port=3000
ホストマシンのウェブブラウザーから http://localhost:3000/ にアクセスして、Welcome aboard のページが表示されることを確認します。
OS X (Mac) もしくは Windows 環境の方は、localhost の部分を docker-machine ip
コマンドで表示される IP アドレスに読み替えてください(例えば、マシン名が default の場合は、docker-machine ip default
を実行)。
確認できたら、Ctrl-C(control キーと C キーの同時押し)で、Web サーバーを終了させます。
ホストマシンからこの Web サーバーにアクセスする場合は、例示のとおり -b 0.0.0.0
を必ず指定してください。
docker コマンドを試してみる
この環境では、docker コマンドも動作します。
$ docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from hello-world
a8219747be10: Pull complete
91c95931e552: Already exists
hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:aa03e5d0d5553b4c3473e89c8619cf79df368babd18681cf5daeb82aab55838d
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(Assuming it was not already locally available.)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
For more examples and ideas, visit:
http://docs.docker.com/userguide/
Worker 開発環境コンテナからのログアウト
exit
コマンドで、Worker 開発環境コンテナからログアウトできます。
$ exit
Worker 開発環境コンテナの終了
Worker 開発環境コンテナを終了させる場合は、docker stop
コマンドを使います。
$ docker stop worker-dev
この状態は、プロセスが停止しているだけですので、docker start
コマンドで再開させることができます。
$ docker start worker-dev
Worker 開発コンテナを削除する場合は、docker rm
コマンドを使います。/workspace
以外で作成したディレクトリやファイルは消えてしまいます。よく確認して実行してください。
$ docker rm worker-dev
データベースコンテナの停止や削除も同様です。
$ docker stop mysql
$ docker rm mysql
Getting Started を試す際の留意事項
この Worker 開発環境を使って、「Getting Started 」の「Rails アプリケーションの作成 」を試す際には、いくつかの留意点があります。
MySQL データベースコンテナの起動と連携
MySQL データベースコンテナを起動して、Worker 開発環境コンテナと連携させてください。
この時のコンテナ起動例を示します(コマンド実行後に表示される結果は省略しています)。
$ mkdir -p $HOME/workspace/learning_magellan
$ cd $HOME/workspace/learning_magellan
$ docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=s3cret -d mysql
$ docker run --privileged --name worker-dev --link mysql:mysql -v $(pwd):/workspace -p 3000:3000 -d magellan/development-env-rails:4.2.6-p2
$ docker exec -it worker-dev su magellan
この例では、Worker 開発環境コンテナとファイル共有する目的で、ホームディレクリ下に、workspace/learning_magellan
というディレクトリを作っています(mkdir
)。更に、Worker 開発環境コンテナ起動時の -v
オプションの指定を簡便にするために、そのディレクトリに移動しています(cd
)。
その後、MySQL データベースコンテナの起動と Worker 開発環境コンテナを起動しています(docker run
)。
最後に、Worker 開発環境コンテナにログインしています(docker exec
)。
Rails のインストールは不要
Rails はインストール済みのため、Rails のインストール(gem install rails
)は不要です。
therubyracer のインストール
Rails の起動に therubyracer が必要です。Rails プロジェクト作成直後に、以下の手順で therubyracer をインストールしてください。
まず、Gemfile 中の therubyracer のコメントアウトを外します。
# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby
その後、bundle install
コマンドで、therubyracer をインストールします。
$ bundle install
データベースの接続設定をデータベースコンテナに変更
データベースへの接続設定をデータベースコンテナに変更します。
具体的には、config/database.yml
中の password
と host
を次のように環境変数を使って設定します。
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password: <%= ENV['MYSQL_ENV_MYSQL_ROOT_PASSWORD'] %>
host: <%= ENV['MYSQL_PORT_3306_TCP_ADDR'] %>
# socket: /var/run/mysqld/mysqld.sock
Worker 開発環境コンテナ起動時に、--link mysql:mysql
として、MySQL データベースコンテナと連携させました。これにより、MYSQL
で始まる環境変数を通して、MySQL データベースコンテナの各種情報にアクセスできます。今回この中から以下の環境変数を使っています。
環境変数
値
MYSQL_ENV_MYSQL_ROOT_PASSWORD
MySQL データベースコンテナ起動時に指定した
MYSQL_ROOT_PASSWORD
環境変数値(root アカウントのパスワード。今回の場合は、s3cret
。)。
MYSQL_PORT_3306_TCP_ADDR
MySQL データベースコンテナの IP アドレス。
rails dbconsole を使う
MySQL コマンドクライアント(mysql)を使う代わりに、./bin/rails dbconsole
の使用をおすすめします。
この環境で mysql コマンドを使用する場合は、データベースコンテナの IP アドレスを指定する必要があります。./bin/rails dbconsole
の場合、config/database.yml
の情報が使われるため、その必要がありません。
ただし、パスワードの入力要求がありますので、データベースコンテナ起動時に指定したパスワードを入力してください(例示のとおりであれば、s3cret
です)。
$ ./bin/rails dbconsole
Enter password:
mysql>
プロンプト以降の操作は、Getting Started の記述どおりです。
$ ./bin/rails dbconsole
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.24 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+----------------------------------+
| Database |
+----------------------------------+
| information_schema |
| mysql |
| performance_schema |
| rails-worker-example_development |
+----------------------------------+
4 rows in set (0.00 sec)
mysql> quit;
Bye
Rails 起動時に bind オプションを指定
ホストマシンから Worker 開発環境コンテナ内の Rails サーバーにアクセスできるように、Rails を起動する場合は、bind オプション(-b
)を使って、IP アドレス 0.0.0.0
を指定します。
$ rails server -b 0.0.0.0
=> Booting WEBrick
=> Rails 4.2.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2015-08-25 06:31:35] INFO WEBrick 1.3.1
[2015-08-25 06:31:35] INFO ruby 2.2.3 (2015-08-18) [x86_64-linux]
[2015-08-25 06:31:35] INFO WEBrick::HTTPServer#start: pid=1487 port=3000