以前当ブログで
pipeworkを使わないでDockerのcontainerにIPアドレスを付与する方法を公開しているが、
今回はpipeworkを使う方法を公開する。
まずはコードから。
CentOS7系の場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/bin/bash -euxCONTAINER_ID=$1IP_CONTAINER=$2IP_HOST=$3NIC_NAME=$4sudo yum -y install bridge-utilssudo yum -y install gitsudo git clone https://github.com/jpetazzo/pipework.git /usr/pipeworksudo ln -s /usr/pipework/pipework /usr/bin/pipeworkpipework br0 $CONTAINER_ID $IP_CONTAINERip addr add $IP_HOST dev br0brctl addif br0 $NIC_NAME |
CentOS6系の場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/bin/bash -euxCONTAINER_ID=$1IP_CONTAINER=$2IP_HOST=$3NIC_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.rpmsudo yum -y install bridge-utilssudo yum -y install gitsudo git clone https://github.com/jpetazzo/pipework.git /usr/pipeworksudo ln -s /usr/pipework/pipework /usr/bin/pipeworkpipework br0 $CONTAINER_ID $IP_CONTAINERifconfig br0 $IP_HOST upbrctl 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系の場合
1 | ip a |
CentOS6系の場合
1 | ifconfig |
NIC名はこのコマンドで表示された名称を入力する。
ちなみに、上記のような設定を行えば、
ホストのNICにIPアドレスを付与しなくても、
network bridgeに付与したIPアドレスでホストに対してアクセスが可能になる。
投稿者プロフィール
最新の投稿
AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
セキュリティ2021年7月14日ゼロデイ攻撃とは
セキュリティ2021年7月14日マルウェアとは
WAF2021年7月13日クロスサイトスクリプティングとは?

