Docker Share

Vagrant Shareとngrok

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

TL;DR

ngrokを使えば,Dockerコンテナに対してVagrant Shareと同様のことができる.つまり,Dockerコンテナを外部ネットワークからアクセス可能にすることができる.

以下をやってみた.

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

準備

OSX上で行った.dockerはboot2dockerで動かす.

$ brew install boot2docker

事前にboot2dockerにport forwardingの設定をしておく.

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

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

$ boot2docker start

また,ngrokをダウンロードして適切な場所に配置しておく.

Apacheコンテナ

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

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"]

イメージをビルドする.

$ docker build -t apache2 .

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

$ docker run -p 8080:80 apache2

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

$ ngrok 8080

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

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

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を生成する.

$ rails new myapp
$ rbdock 2.1.0 -a myapp

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

イメージをビルドする.

$ docker build -t rails 

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

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

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

$ ngrok 8080

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

参考