pipeworkを使ってDockerのcontainerにIPアドレスを付与する方法

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

以前当ブログで
pipeworkを使わないでDockerのcontainerにIPアドレスを付与する方法を公開しているが、
今回はpipeworkを使う方法を公開する。

まずはコードから。

CentOS7系の場合

#!/bin/bash -eux

CONTAINER_ID=$1
IP_CONTAINER=$2
IP_HOST=$3
NIC_NAME=$4

sudo yum -y install bridge-utils
sudo yum -y install git
sudo git clone https://github.com/jpetazzo/pipework.git /usr/pipework
sudo ln -s /usr/pipework/pipework /usr/bin/pipework

pipework br0 $CONTAINER_ID $IP_CONTAINER
ip addr add $IP_HOST dev br0
brctl addif br0 $NIC_NAME

CentOS6系の場合

#!/bin/bash -eux

CONTAINER_ID=$1
IP_CONTAINER=$2
IP_HOST=$3
NIC_NAME=$4

# ↓CentOS6系はこのinstallがないとpipeworkが動作しないため 参考→http://tanksuzuki.com/post/docker-pipework-bridge/
sudo yum -y install https://repos.fedorapeople.org/repos/openstack/EOL/openstack-icehouse/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm

sudo yum -y install bridge-utils
sudo yum -y install git
sudo git clone https://github.com/jpetazzo/pipework.git /usr/pipework
sudo ln -s /usr/pipework/pipework /usr/bin/pipework

pipework br0 $CONTAINER_ID $IP_CONTAINER
ifconfig br0 $IP_HOST up
brctl addif br0 $NIC_NAME

そしてこのシェルスクリプトの実行時にパラメーターとして以下のパラメーターを渡す。

  • 対象のDocker containerのID
  • Docker containerに付与するIPアドレス
  • Hostに付与するIPアドレス
  • HostのNIC名

これらコードで重要なのは最後の3行だ。

docker_to_public_network

まずざっくり説明すると、
1.
最初のpipeworkコマンドでホスト側に”br0″という名前のnetwork bridgeを作成すると同時に
対象のDocker containerにIPアドレスを付与し、
且つDocker containerとホスト側のnetwork bridgeとを接続する。

2.
そして、次の行のipコマンド若しくはifconfigコマンドでnetwork bridgeにIPアドレスを付与する。

3.
更にbrctlコマンドでnetwork bridgeとHostのNICを接続している。

network bridgeとNICについても簡単に解説する。

network bridgeとは、
ルーターのような、複数のネットワークを接続して通信できるようにする機器で、
ここでは仮想のnetwork bridgeをHost内に作成している。
このようにnetwork bridgeを簡単に扱うのがbridge-utilであり、brctlコマンドで様々な操作ができる。
このコマンドをインストールせずに直接Linuxの設定ファイルを操作することでも
network bridgeを作成したり設定したりできるが、
そうして作成したサーバーは実際の使用中にネットワーク通信で何かしらのトラブルが発生し易く、
そのデバッグも非常に大変なので、特別な理由がない限りbridge-utilを利用することを推奨する。

NICとは、
Network Interface Cardの略で、
サーバーにあるLANケーブルの差込口やWi-Fiの無線LANアダプターなどを指す。
以下のコマンドで現在OSが認識しているNICの一覧を表示できる。
CentOS7系の場合

ip a

CentOS6系の場合

ifconfig

NIC名はこのコマンドで表示された名称を入力する。

ちなみに、上記のような設定を行えば、
ホストのNICにIPアドレスを付与しなくても、
network bridgeに付与したIPアドレスでホストに対してアクセスが可能になる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.