以前当ブログで
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行だ。
まずざっくり説明すると、
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アドレスでホストに対してアクセスが可能になる。
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?