LoginSignup
28
23

More than 5 years have passed since last update.

Dockerコンテナに複数のNICを付与する方法 (CentOS 7)

Last updated at Posted at 2016-11-30

最新の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は使用しない

  1. イメージの取得 (docker pull)
  2. コンテナ化 (docker create)
  3. ネットワーク追加 (docker network connect)
  4. 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
28
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
23