今回は、ソフトウェア定義型ネットワークを実現する「pipework」を使って、Dockerコンテナのネットワーク帯域幅を制御する具体的な手順をご紹介します。
第39回では、ソフトウェア定義型ネットワークを実現する「pipework」のDHCPクライアント機能により、Dockerコンテナに動的IPアドレスを割り当てる手順をご紹介しました。今回は、pipeworkを使ったDockerコンテナのネットワーク帯域幅制御の手順をご紹介します。
コンテナからの送信帯域幅制御ができているかを確認するには、Webサーバコンテナに100Mバイトのファイル「testfile」を用意し、このtestfileをクライアントからwgetコマンドで入手するときの速度を測るのが簡単です。Webサーバが動作しているDockerコンテナが提供する、testfileを入手する際の伝送速度をクライアント側で確認し、pipeworkによるコンテナの送信帯域幅制御が機能しているかを判断します。
このため、テスト環境はWebサーバコンテナが稼働するサーバが1台と、Webサーバが提供するtestfileの入手を行うクライアントの2台で構成します。Dockerコンテナのネットワーク通信に関する帯域幅制御を行うシステム構成は、以下のとおりです。
物理マシン | サーバ1号機 | Linux PC |
---|---|---|
役割 | Webサーバーコンテナc4の稼働 | クライアント |
ホストOS | CentOS 7.3 | CentOS 7.3 |
Dockerエンジン | 17.03.0-ce | − |
稼働させるコンテナ | c4 | なし |
ホストOSのIPアドレス | 172.16.1.161/16 | 172.16.1.163/16 |
ホストOSのゲートウェイ | 172.16.1.1 | 172.16.1.1 |
ホストOSのDNS参照先 | 172.16.1.254 | 172.16.1.254 |
マシン | NIC | ブリッジ | MACアドレス | IPアドレス |
---|---|---|---|---|
ホストOS | eth0 | br-ex | 6C:3B:E5:50:3B:30 | 172.16.1.161/16 |
コンテナc4 | eth0 | − | 00:01:02:03:04:08 | 172.16.1.94/16 |
今回も、pipeworkの稼働の前提条件として、この連載の第35回で紹介した内容を元に、サーバ1号機のホストOSにOpen vSwitch(OVS)とDockerエンジンをインストールしておいてください。
まずは、ネットワークインタフェースを付与しない状態でコンテナc4を起動します。
# docker run \ -itd \ --name=c4 \ -h c4 \ --net=none \ centos:6.8 \ /bin/bash
コンテナc4が起動したら、pipeworkにより、固定IPアドレス「172.16.1.94/16」を付与します。以下は、OVSブリッジ「br-ex」が利用可能なホストOSにおいて、稼働中のコンテナc4に、「eth0」という仮想NICに動的IPアドレスを割り当て、MACアドレスとして「00:01:02:03:04:08」を設定する例です。
# pipework \ br-ex \ ←ホストOSのOVSブリッジインタフェース -i eth0 \ ←コンテナ内に作成する仮想NIC c4 \ ←コンテナ名 dhclient \ ←pipeworkが提供するDHCPクライアント機能を利用 00:01:02:03:04:08 ←コンテナc3のeth0に割り当てるMACアドレス
これでコンテナc4に、172.16.1.94/16の固定IPアドレスが付与されましたので、サーバ1号機で稼働するコンテナc4のIPアドレスとMACアドレスを確認します。
# docker exec -it c4 ifconfig eth0 |head -2 eth0 Link encap:Ethernet HWaddr 00:01:02:03:04:08 inet addr:172.16.1.94 Bcast:172.16.255.255 Mask:255.255.0.0
次に、コンテナc4をWebサーバにするために、httpdパッケージをインストールします。プロキシサーバ経由でインターネットにアクセスする場合は、Dockerコンテナ内の /etc/yum.conf ファイルにプロキシサーバの設定を行っておきます。以下では、分かりやすいようにコンテナc4のコマンドプロンプトを「c4 #」で表すとします。
# docker exec -it c4 /bin/bash c4 # echo "proxy=http://proxy.your.site.com:8080" >> /etc/yum.conf c4 # yum install -y httpd
コンテナc4で、httpdサービスを稼働させます。
c4 # service httpd start c4 # ps -ef |grep httpd |grep -v grep root 160 0 0 09:02 ? 00:00:00 /usr/sbin/httpd apache 162 160 0 09:02 ? 00:00:00 /usr/sbin/httpd apache 163 160 0 09:02 ? 00:00:00 /usr/sbin/httpd ...
httpdサービスが立ちあがったら、コンテナc4上に100Mバイトのtestfileを用意します。
c4 # dd if=/dev/zero of=/var/www/html/testfile bs=1024k count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.170172 s, 616 MB/s c4 # ls -lh /var/www/html/testfile -rw-r--r-- 1 root root 100M Mar 8 09:04 /var/www/html/testfile
以上で、コンテナc4のWebサービスとtestfileが用意できましたので、ホストOSのコマンドプロンプトに戻ります。
c4 # exit #
Copyright © ITmedia, Inc. All Rights Reserved.