Docker Share

Vagrant Shareとngrok

Vagrant Share素晴らしい.外部ネットワークのマシンから,ローカルに立てた仮想マシンへのアクセスを実現している.

TL;DR

ngrokを使えば,Vagrant Shareのようにローカルに立てたDockerコンテナを外部ネットワークからアクセス可能にすることができる.

以下をやってみた.

  • Apacheコンテナへのアクセス
  • Railsコンテナへのアクセス

準備

環境は,OSX上でboot2dockerを使って行う.またngrokをインストールして適切な場所に配置しておく.

事前にboot2dockerを停止した状態で,port forwardingをして置く.

1
$ VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8080,tcp,,8080,,8080"

設定が終わったらしたら,boot2dockerを起動しておく.

1
$ boot2docker start

Apacheコンテナの公開

以下のようなDockerfileを準備する.

1
2
3
4
5
6
7
8
9
10
11
12
13
FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y apache2

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D", "FOREGROUND"]

イメージをビルドする.

1
$ docker build -t apache2 .

コンテナを起動する.このとき,8080->80でport forwardingをする.

1
$ docker run -p 8080:80 apache2

次に,ngrokを8080ポートで起動する.

1
$ ngrok 8080

すると,http://4c9084d8.ngrok.comのようなURIが発行される.あとはVagrant Shareと同様にこのURIを共有すれば,外部ネットワークからこのコンテナにアクセスできる.

以下のような流れでコンテナ内へのアクセスが実現される.

1
2
http://4c9084d8.ngrok.com -> 127.0.0.1:8080 (localhost)
-> 127.0.0.1:8080 (boot2docker-vm) -> 127.0.0.1:80 (apache container)

Railsコンテナの公開

Railsアプリのコンテナも同様に外部ネットワークへ公開することができる.

Railsアプリを新規に作成し,rbdockを使ってRailsアプリ用のDockerfileを生成する.

1
2
$ rails new myapp
$ rbdock 2.1.0 -a myapp

すると,このようなDockerfileが生成される.

イメージをビルドする.

1
$ docker build -t rails

コンテナを起動する.8080->3000でport forwadingをする.

1
$ docker run -i -p 8080:3000 rails 'rails server'

同様にngrokを8080ポートで起動する.

1
$ ngrok 8080

すると,http://36a98c94.ngrok.comのようなURIが発行される.あとはこのURIを共有するだけ.簡単だ.

参考


Full Blog →