最新のDockerを使用
CentOs7の標準yumでのインストールだとバージョンが古い。
docker.x86_64 1.10.3-46.el7.centos.14
上記でも実行出来るかも知れないですが、最新版をインストールします。
dockerproject.orgからインストール。
https://docs.docker.com/engine/installation/linux/centos/
$ sudo docker --version
Docker version 1.12.3, build 6b644ec
Docker Networkでブリッジを作成
Docker Networkコマンドで仮想のブリッジを作成します。
内部では、brctlの同等な機能実行されて居るようですが、
brctlで作成しても、dockerでは使えません。
$ sudo docker network create --driver=bridge --subnet=10.10.10.0/24 --gateway=10.10.10.1 -o "com.docker.network.bridge.name=br_nic1" br_nic1
$ sudo docker network create --driver=bridge --subnet=10.10.20.0/24 --gateway=10.10.20.1 -o "com.docker.network.bridge.name=br_nic2" br_nic2
$ sudo docker network create --driver=bridge --subnet=10.10.30.0/24 --gateway=10.10.30.1 -o "com.docker.network.bridge.name=br_nic3" br_nic3
上記の設定では、「docker network create」で作成した名前を昇順ソートされて、
一番上に来た物(br_nic1)がDockerコンテナ内のデフォルト・ゲートウェイになります。
「-o "com.docker.network.bridge.name=[Bridge Name]"」を追加することで
brctlで確認した場合はに、「bridge name」に振られます。
省略すると、勝手にユニークな名前が振られますので確認が難しくなるので
保守しやすいように、同一名を振ると便利です。
$ sudo brctl show
bridge name bridge id STP enabled interfaces
br_nic1 8000.XXXXXXXXXXXX no
br_nic2 8000.XXXXXXXXXXXX no
br_nic3 8000.XXXXXXXXXXXX no
$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
XXXXXXXXXXXX br_nic1 bridge local
XXXXXXXXXXXX br_nic2 bridge local
XXXXXXXXXXXX br_nic3 bridge local
...
Docker runは使用しない
- イメージの取得 (docker pull)
- コンテナ化 (docker create)
- ネットワーク追加 (docker network connect)
- Dockerの実行 (docker start)
$ sudo docker pull tomat:8
$ sudo docker create -it --name tomcat --hostname tomcat tomat:8
$ sudo docker network connect --ip=10.10.10.10 br_nic1 tomcat
$ sudo docker network connect --ip=10.10.20.10 br_nic2 tomcat
$ sudo docker network connect --ip=10.10.30.10 br_nic3 tomcat
$ sudo docker start tomcat
上記では、Dockerコンテナ「tomcat」に対して複数のIPを設定しています。
下記の様に試せると思います。
curl http://10.10.10.10:8080/
curl http://10.10.20.10:8080/
curl http://10.10.30.10:8080/
実NICとの連係
上記の状態では実NICと連係出来無いので、
brctlで、実NICとコンテナをブリッジします。
$ sudo brctl addif br_nic1 [実NIC1]
$ sudo brctl addif br_nic2 [実NIC2]
$ sudo brctl addif br_nic3 [実NIC3]
サービスで自動接続
Networkサービスより、Dockerの自動起動が遅いので、
ifcfgファイルでブリッジ設定は出来ませんでした。
下記の様にサービスを追加することで、
Boot時に自動的にネットワークが接続します。
$ sudo vi /etc/systemd/system/docker1.service
---
[Unit]
Description=docker1
After=docker.service
Requires=docker.service
[Service]
ExecStart=/root/bin/DockerBridge.sh
[Install]
WantedBy=multi-user.target
---
$sudo vi /root/bin/DockerBridge.sh
---
#!/bin/bash
/usr/sbin/brctl addif br_nic1 [実NIC1]
/usr/sbin/brctl addif br_nic2 [実NIC2]
/usr/sbin/brctl addif br_nic3 [実NIC3]
---
$ sudo systemctl daemon-reload
$ sudo systemctl enable docker1