LoginSignup
43
42

More than 5 years have passed since last update.

Dockerのネットワーク周りの備忘

Last updated at Posted at 2014-02-27

boot2dockerのネットワーク周りでちょっとハマったので書いた。間違いがあったら突っ込みお願いします。

Dockerの構造

フロントエンドとデーモン

dockerフロントエンドと、実際にコンテナを操作するデーモンは、go言語で書かれた同一バイナリだが別物だ。フロントエンドは、MacなどLinux以外の環境でも動作する。デーモンは現状ではDebian/CentOSでしか動作しない。通常はフロントエンドとデーモンはUNIXソケットで通信を行う。

デーモンを外部接続を許可させる起動方法

$ docker -d -H tcp://0.0.0.0:4243/ -H unix:///var/run/docker.socket

Debian/CentOSにどういう方法でインストールしたかによるかもしれないが、通常は外部接続を許してないので、起動スクリプトを上記のように変更する。

リモート接続する方法

$ export DOCKER_HOST="tcp://192.168.1.2:4243"

フロントエンド側も通常はUNIXソケットを見に行くので、リモート接続する場合DOCKER_HOSTの環境変数の設定が必要となる。

boot2docker

Linux以外の環境でお手軽にdockerを試すことのできるboot2dockerイメージは、dockerに最小限必要なものだけがインストールされたものだ。Macのbrewで一発インストールできるようになったboot2dockerフロントエンドは、VirtualBoxでboot2dockerイメージを操作するvagrantのようなラッパーだ。

boot2dockerをはじめとした仮想マシン上でデーモンが動作している場合は、コンテナ内部で立ち上げたサーバー類のポートフォワードなどを考えないといけない。方法としてはVirtualBoxのCLIであるVBoxManageを使う方法はhttp://qiita.com/ikuyamada/items/3f12de859a87d51fdd79に書かれている。別の方法としてはsshで接続してsshのポートフォワード機能を使うなどがある。

httpdを起動して、ネットワーク周りを探る

$ cat > Dockerfile
FROM centos
RUN yum install -y httpd
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

$ docker build -t httpd .
$ docker run -d httpd

この状態でhttpdを起動した場合、httpdにアクセスするためには、対象のコンテナのIPを調べて直接アクセスする必要がある

$ docker inspect `docker ps -l -q` | grep IPAddress | cut -d '"' -f 4
$ curl http://出てきたIP/

起動方法を変えることでポートマッピングをすることもできる

$ docker run -d -p 80:80 httpd
$ curl http://localhost/

※この時boot2dockerとかを使ってる場合は、さらにもう一段ポートフォワードする必要があることを忘れないように。

43
42
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
43
42