VirtualBoxのVM上のCentOS7.1+Dockerでpipeworkを使って固定IP化してみる
背景
VirtualBoxのVM上のCentOS7.1+Dockerを開発環境のベースにしようと考え中なのですが、IPアドレスをDockerが勝手に割り振ってしまう+NAPTでポートの設定が面倒、というところからpipeworkで固定IP化して仮想ブリッジ経由でホストからアクセスできるようにしてみたいと思います。こうすることで、VirtualBoxのホストからDockerのコンテナにポートの設定を気にせず直接アクセスできるようになります。
なお、世の中的にはDockerでpipeworkを使うのは非推奨の流れのようですが、2015/11/19時点でお手軽に試せるので使ってみました。
参考にした情報
ほとんどこちらの記事を参考にさせていただきました。
前提
- VirtualBoxのVMにCentOS 7.1とDockerをインストール済みとします
設定手順
VirtualBoxのVMの設定変更
仮想ブリッジと関連付けるネットワークアダプターを別途追加します。用途に応じて「ホストオンリーアダプター」か「ブリッジアダプター」を追加します。
また、追加したネットワークアダプターの「プロミスキャスモード」を「すべて許可」に変更します。
仮想ブリッジを作成
まずbridge-utilsをインストールします。
# yum -y install bridge-utils
仮想ブリッジを作成します。
# nmcli con add type bridge ifname br0
# nmcli con modify bridge-br0 bridge.stp no
次に、追加したネットワークアダプターがブリッジの場合は、以下のようにブリッジするネットワークと同じネットワーク上の仮想ブリッジに割り当てるIPアドレス(x.x.x.x)、ゲートウェイアドレス(y.y.y.y)、DNSサーバアドレス(z.z.z.z)を設定します。
# nmcli con modify bridge-br0 ipv4.method manual ipv4.address x.x.x.x/24 ipv4.gateway y.y.y.y ipv4.dns z.z.z.z
追加したネットワークアダプターがホストオンリーの場合は、以下のようにブリッジするホストオンリーアダプターのネットワーク上の仮想ブリッジに割り当てるIPアドレス(x.x.x.x)を設定します。
# nmcli con modify bridge-br0 ipv4.method manual ipv4.address x.x.x.x/24
次に、作成した仮想ブリッジと追加したネットワークアダプターを関連付けます。ここでは「eth2」を関連付けていますが、各自の環境に合わせて調整してください。
# nmcli con add type bridge-slave ifname eth2 master bridge-br0
サーバ再起動
いったんサーバ再起動して仮想ブリッジを有効化させます。以下のコマンドで設定内容を確認できます。
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.080027bc11fa no eth2
docker0 8000.0242fd49b7c0 no
pipeworkのインストール
Githubのリポジトリからgit cloneしてきます。
# yum -y install git
# cd /usr/local/src
# git clone https://github.com/jpetazzo/pipework.git
# ln -s /usr/local/src/pipework/pipework /usr/local/bin/
使用方法
起動したコンテナのコンテナIDを取得します。docker psで確認できます。
追加したネットワークアダプターがブリッジの場合は、コンテナに設定したいIPアドレス(a.b.c.d)、ゲートウェイアドレス(y.y.y.y)を使って以下のようにします。
# pipework br0 コンテナID a.b.c.d/24@y.y.y.y
追加したネットワークアダプターがホストオンリーの場合は、コンテナに設定したいIPアドレス(a.b.c.d)を使って以下のようにします。
# pipework br0 コンテナID a.b.c.d/24
注意点
docker stopするとpipeworkでの設定内容がクリアされるので、再度pipeworkで設定する必要があるようです。