
Ubuntu日本語フォーラム

ログインしていません。
識者の皆様
初めまして、斉藤と申します
この度、サーバーインフラ徹底攻略という書籍の中の「コンテナ方仮想化とクラウドによる実践」
第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を待ち受けていないことが、原因かと思うのですが、これも決定的な問題なのかの
切り分けが出来ていない状況です
上記の状況の解決にはどの様な手段を用いればいいのでしょうか
識者の皆様、ご指導をよろしくお願い申し上げます
オフライン