6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ubuntu 14.04 LTS Dockerによるrails環境構築(ハンパ版)

Last updated at Posted at 2015-11-25

【注意】まだコンテナ外部から接続できてません。
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 (ユーザ名)
    1. 一度ログアウト
    1. 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の両方とも受け付ける設定になってただけみたい。
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?