お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2015-01-13 00:38:18

tetuya0703
新しいメンバ
登録日: 2015-01-12

ubuntu-14.10へのdockerのinstallと設定について

識者の皆様
初めまして、斉藤と申します

この度、サーバーインフラ徹底攻略という書籍の中の「コンテナ方仮想化とクラウドによる実践」
第3章で記載されているubuntuでdockerを利用したコンテナ型の仮想化を試して見ました

今回、利用をしたubuntuはubuntu-14.10-server-amd64.isoを用いてvmware fusionでhost-osの環境を構築しました
構築後は
・apt-get update
・apt-get install -y docker.io
を実行して、dockerの環境を構築しました
※installされたdockerのversionはDocker version 1.2.0, build fa7b24fになります

次にdockerでrubyを用いたwebアプリケーションフレームワークのを利用するために
下記のファイルを/root/app配下に作成しました
【app.rb】
require 'rubygems'
require 'sinatra/base'

class App < Sinatra::Base
    get '/' do
        "hello, world"
    end
end

【config.ru】
require 'rubygems'
require 'bundler'

Bundler.require

require './app'
run App

【Gemfile】
source 'https://rubygems.org'
gem 'sinatra'
gem 'rack-test'

次に下記コマンドでdockerにubuntuをinstallしました
【コマンド】
docker run -i -t ubuntu /bin/bash

上記コマンドでinstallできたimageを用いて、下記のDockerfileで新規のイメージの中に上記のrubyのファイルを
取り込んだ新規イメージの作成を行いました
Dockerfileは/root/app配下に保存しています
【Dockerfile】
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get -y install ruby1.9.3
RUN gem install bundler
ADD . /src
RUN cd /src && bundle install
EXPOSE 4567
WORKDIR /src
CMD cd /src && rackup -p4567

上記の状態で新規イメージを作成を下記コマンドで実行をしました
【コマンド】
docker build -t sample-app .

コマンドの実行すると色々は情報が出力されますが
最終的にはsuccessfullyと出たので、イメージ自体は正常に作成をされたと考えています

次に、上記で出来たイメージを下記のコマンドで実行をしました
【コマンド】
docker run -p 4567:4567 -t sample-app

【結果】
root@ubuntu:~/app# docker run -p 4567:4567 -t sample
[2015-01-12 09:50:49] INFO  WEBrick 1.3.1
[2015-01-12 09:50:49] INFO  ruby 1.9.3 (2013-11-22) [x86_64-linux]
[2015-01-12 09:50:49] INFO  WEBrick::HTTPServer#start: pid=9 port=4567

この状態でdockerはアプリケーションサーバーとして、sinatraがport:4567で待ち受けて動作して
httpでport:4567にアクセスしたときに"hello, world"と表示されることを想定していました
所がhost-osよりwgetで
wget -qO- http://localhost:4567/
とアクセスしてもhost-osからsample-appのコンテナにアクセスをする事が出来ませんでした

色々とhost-osの状況を確認してみました
【docker ps】
CONTAINER ID        IMAGE                      COMMAND                CREATED             STATUS               PORTS                              NAMES
a79d43f86674        sample-app:latest       "/bin/sh -c 'cd /src   9 seconds ago       Up 7 seconds        0.0.0.0:4567->4567/tcp   agitated_wozniak


【iptables -L -t nat】
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  anywhere            !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        anywhere           

Chain DOCKER (2 references)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             anywhere             tcp dpt:4567 to:172.17.0.41:4567

上記のiptablesを見る限り、dockerで動作しているコンテナのIPアドレスは172.17.0.14で動作していることが
確認出来たので、wget -qO- http://172.17.0.41:4567/でアクセスしてみたのですが
やはりアクセスをするとが出来ませんでした

念の為、172.17.0.41:4567がアクセスできるのか、telnetで
telnet 172.17.0.41 4567を実行してみたのですが
telnet: Unable to connect to remote host: Connection refused
となり、アクセスすることすら出来ませんでした
でも、ping 172.17.0.41は応答があることからコンテナがhost-osからのアクセスが全く出来ないというわけでは
無いように思います

あと、気になることとしてはhosy-os側でnetstat -a|grep 4567を実行すると
tcp6       0      0 [::]:4567               [::]:*                  LISTEN
となっており、tcpで4567を待ち受けていないことが、原因かと思うのですが、これも決定的な問題なのかの
切り分けが出来ていない状況です

上記の状況の解決にはどの様な手段を用いればいいのでしょうか
識者の皆様、ご指導をよろしくお願い申し上げます

オフライン

 

Board footer

Powered by FluxBB