【注意】まだコンテナ外部から接続できてません。
tcp6でバインドされててうまくつながらない。
回避策調べて追記します。
【追記 11/26】
rails server 起動コマンドで外部から接続するよーに指定してなかっただけでした
超なやんだのに何だったんだ
1.動機
故あってUbuntu 14.04 LTS上でDocker環境でrails環境作ることにしました
2.Docker環境のインストール
基本的に公式ドキュメント通りに実施する。
- 1.バージョン確認
$ uname -r
3.13.0-68-generic
公式ドキュメントには
your kernel must be 3.10 at minimum
とあるので、うちの環境だと問題ないみたい。
- 2.aptのアップデートと設定
最新のdockerを手に入れるためには、リポジトリの設定をしなければならんようです。
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
(中略)
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
$
とgpg keyを加えたあと、
/etc/apt/sources.list.d/docker.list
を編集するなり、なければ作れ、とある。
うちだと、
$ pwd
/etc/apt/sources.list.d
$ ls
$
なかったので、viで作る。
deb https://apt.dockerproject.org/repo ubuntu-trusty main
うちは14.04 LTSなので上記。他のバージョンだと違うので、公式ドキュメントを参照。
aptをアップデートして、
$ sudo apt-get update
apt-cacheを実行。
$ sudo apt-cache policy docker-engine
linux-image-extraを入れろ、とおすすめされているので、それを入れる。
sudo apt-get install linux-image-extra-$(uname -r)
うちだと、already the newest versionと出た。
- 3.dockerインストール
いよいよdockerのインストール実施。
sudo apt-get install docker-engine
- 4.dockerサービス起動
$ sudo service docker start
すでに動いてるよ、と怒られた。
- 5.docker起動確認
$ sudo docker run hello-world
(中略)
Hello from Docker.
This message shows that your installation appears to be working correctly.
(中略)
$
$docker images
(中略)
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hello-world latest 0a6ba66e537a 6 weeks ago 960 B
(中略)
とりあえず動いてはいるようですね。
- 6.Dockerを常にsudoで動かすのは都合悪いので、ユーザーグループ追加
$ sudo usermod -aG docker (ユーザ名)
-
- 一度ログアウト
-
- sudoなしでdockerコマンド実行
$ docker run hello-world
Hello from Docker.
This message shows that your installation appears to be working correctly.
(後略)
いい感じにできた。
$ docker --version
Docker version 1.9.1, build a34a1d5
上記のとおり、1.9.1がインストールできている。
3.元となるimageのpull
docker pullコマンドを実行して、imageをひっぱってくる。
docker hubのubuntuページみると、
14.04.3, 14.04, trusty-20151028, trusty, latest (trusty/Dockerfile)
とタグ設定あるので、まあせっかくなんでウチの環境
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
と合わせたやつを持ってきましょう。自分でイメージ作っちゃえばいいんですけどね。
$docker pull ubuntu:14.04.3
$
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04.3 e9ae3c220b23 2 weeks ago 187.9 MB
hello-world latest 0a6ba66e537a 6 weeks ago 960 B
軽く起動してみて、ちゃんと動くかどうか確認。
$ docker run -it ubuntu:14.04.3 /bin/bash
root@95bd14488f51:/#
# uname -a
Linux 95bd14488f51 3.13.0-68-generic #111-Ubuntu SMP Fri Nov 6 18:17:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
(ctrl+p, ctrl+qでプロセスぬける)
$
(ホストに戻る)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b7765856679a ubuntu:14.04.3 "/bin/bash" 11 seconds ago Up 11 seconds loving_bell
$
ついでにexecコマンドを実施。
$ docker exec -it b7765856679a bash
root@b7765856679a:/#
ちゃんと動いてるみたいなので、後始末。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b7765856679a ubuntu:14.04.3 "/bin/bash" 3 minutes ago Up 3 minutes loving_bell
$docker stop b7765856679a
b7765856679a
$
以上でとりあえず動くことは確認でけた。
4.Dockerfile
以下、Techscoreさんのサイトを参考に実施。
mysqlは別サーバに設定することにし、コンテナへはdocker execで入ることにする。
コンテナ内だとプロセス切るごとあじゃぱーになって泣くので、ワークスペースは外部でマウント。
dockerfileを書いて、docker内部でrails4環境を作る。
まずは一般ユーザで/home/rails/workspaceを作っておいてから、以下の記述。
FROM ubuntu:14.04.3
MAINTAINER kentakuma<hogehogehoge@gmail.com>
# 基本的パッケージを導入
ENV TERM $TERM:xterm
RUN apt-get update
RUN apt-get install -y build-essential wget curl git
RUN apt-get install -y libffi-dev
RUN apt-get install -y zlib1g-dev libssl-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev
RUN apt-get install -y sqlite3 libsqlite3-dev
RUN apt-get clean
#ruby-buildの導入
RUN git clone https://github.com/sstephenson/ruby-build.git .ruby-build
RUN .ruby-build/install.sh
RUN rm -fr .ruby-build
# ruby 2.2.1のインストール
RUN ruby-build 2.2.1 /usr/local
# bundlerの導入
RUN gem update --system
RUN gem install bundler --no-rdoc --no-ri
# railsコマンドを実行したときのエラー抑止用
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:ubuntu-toolchain-r/test
RUN apt-get update
RUN apt-get install -y gcc-4.9 g++-4.9
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 100 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9
RUN gem install libv8 -v '3.16.14.11' -- --with-system-v8
RUN bundle config build.libv8 --with-system-v8
# railsのインストール
RUN gem install rails --version="~> 4.2.3" --no-ri --no-rdoc
RUN mkdir ~/workspace
EXPOSE 3000
VOLUME /home/rails/workspace
ここらへんも助けになりました。
Dockerfileのビルド実施。
$ docker build -t ubuntu/rails:0.0 .
だいぶ待ちます。とくにrubyのインストール中。
5.Docker起動
-vオプションで永続化ファイルを指定しつつdocker imageの起動実施。
docker run -v /home/rails/workspace:/root/workspace -it -p 3000:3000 ubuntu/rails:0.0 /b
in/bash
6.railsコマンド実行
/root/workspaceがワークスペースになっているので、そこでrailsで動かしてみる。
# rails new test_mogemoge
(中略)
Installing sdoc 0.4.1
Installing spring 1.4.4
Installing sqlite3 1.3.11 with native extensions
Installing turbolinks 2.5.3
Installing uglifier 2.7.2
Installing web-console 2.2.1
Bundle complete! 12 Gemfile dependencies, 53 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
run bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted
# cd test_mogemoge
Gemfileで、以下をコメントイン
# gem 'therubyracer', platforms: :ruby
→
gem 'therubyracer', platforms: :ruby
# bundle install #rootでやるなと怒られる
# rails g controller welcome index
create app/controllers/welcome_controller.rb
route get 'welcome/index'
invoke erb
create app/views/welcome
create app/views/welcome/index.html.erb
invoke test_unit
create test/controllers/welcome_controller_test.rb
invoke helper
create app/helpers/welcome_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/welcome.coffee
invoke scss
create app/assets/stylesheets/welcome.scss
# rails server →【11/26追記】これだとコンテナ外部からつながらないので、外部からアクセスしたい場合は
# rails server -b 0.0.0.0
と、とりあえず動いたチック。
課題
- Mysqlとの連携
- libv8とtherubyracer問題のDockerfile上での回避
- Webricだとあれなのでnginxあたり導入
- 何故かportがtcp6でバインドされてるので回避策。このままだと外部からつながらない!→できました。tcp6でバインドされてたんじゃなくて、ip4/6の両方とも受け付ける設定になってただけみたい。