第37回 Dockerでソフトウェア定義型ネットワーキングツール「pipework」を活用する:古賀政純の「攻めのITのためのDocker塾」(1/2 ページ)
前回まで、3回に渡ってOpenStackでも利用されているソフトウェア定義型ネットワーキングを実現するOpen vSwitch(OVS)とovs-dockerを使ってホストOSとコンテナを同一LANセグメントに所属させ、マルチホストのコンテナ間通信を実現しました。今回は、Docker基盤で古くから利用されている「pipework」を使ったネットワーキングをご紹介します。
「pipework」とは
pipeworkは、ソフトウェア定義型ネットワークを実現するソフトウェアです。Dockerコンテナに対して、IPアドレス、ネットマスク、デフォルトゲートウェイの設定などを行うことができます。連載第34回、第35回、第36回でご紹介したOVS環境では、ovs-dockerによって、Dockerコンテナに固定IPアドレスの付与などを行いましたが、これと同様の操作を行うのがpipeworkです。pipeworkは、Dockerの世界において、比較的古くから利用されており、導入も非常に簡単であることから、現在でも国内外を問わず広く利用されています。OS標準のLinuxブリッジを使った環境だけでなく、Open vSwitch(OVS)環境でも利用できます。pipeworkは、シェルスクリプトで記述されており、Dockerエンジンが稼働する主要なLinuxディストリビューションで動作します。
多機能なpipework
pipeworkには、さまざまな機能があります。ここでは、pipeworkが提供する魅力的なネットワーク管理機能をいくつかご紹介します。
Dockerコンテナへの固定IPアドレスの付与
pipeworkの典型的な利用方法は、コンテナへの固定IPアドレスの割り当てです。pipework自体は、ホストOS上から操作し、コンテナに対して、固定IPアドレス、ネットマスク、デフォルトゲートウェイ、MACアドレスの割り当てなどを行います。
ブリッジインタフェース(Linuxブリッジや、OVSブリッジ)をホストOS側で構築しておけば、あとは、pipeworkによって、ホストOSと同一LANセグメントの固定IPアドレスをDockerコンテナに簡単に付与できます。
DHCPクライアント機能
pipeworkでは、管理対象とは別に用意されたDHCPサーバーが付与する動的IPアドレスをコンテナに割り当てる「DHCPクライアント」の機能があります。クラウド基盤などのように、ユーザーに対してコンテナ環境を自動的に割り当てる際に、IPアドレスも自動で動的に割り当てる必要があります。そのような場合に、DHCPサーバの動的IPアドレスの付与機能と、pipeworkのDHCPクライアント機能を組み合わせることで、コンテナに動的IPアドレスを割り当てることができます。DHCPサーバ側でコンテナのIPアドレスを一元管理できるようになるため、コンテナのIPアドレスの付与作業等の管理の手間を大幅に削減できます。
ちなみに、現在は、DHCPサーバを搭載したDockerイメージがコミュニティによって提供されており、DHCPサーバ自体もDockerコンテナで稼働させることが可能です。DHCPサーバをDockerコンテナで稼働させる場合、DHCPサーバコンテナは、ホストネットワークに直接接続する「ホストモード」による構成か、あるいは、Linuxブリッジ、およびOVSブリッジを経由してホストOSと接続する「ブリッジ構成」で稼働できます。
送信帯域幅制御機能
通信事業者やサービスプロバイダーの中には、ユーザーのデータ通信の使用量に基づいて、通信速度を制限するといった仕組みがみられます。これと同じような通信速度の制限を実現する方法の1つに、OSが提供するネットワーク帯域幅制御機能が挙げられます。具体的には、tcコマンドやcgroup(コントロールグループ)によって、ネットワークインタフェースやプロセスの通信帯域幅を制限することが可能です。pipeworkでは、tcコマンドの仕組みを利用し、Dockerコンテナが通信する帯域幅を制限します。また、tcコマンドを使ったpipeworkによる帯域幅制御では、Dockerコンテナを稼働させたまま、帯域幅を変更することができます。例えば、現在の帯域幅の設定を1Mbpsに制限する、あるいは、逆に1000Mbpsに変更するといった指定が可能です。ただし、pipeworkに限らず、tcコマンドは、送信の帯域幅制御のみを行い、受信の帯域幅制御は行いませんので、注意が必要です。
関連記事
- 第32回 Dockerコンテナ同士の通信方法、フラットなネットワークを作る(前編)
複数の物理サーバで稼働するDockerコンテナ同士を通信させるには「Swarmクラスタ」を使います。実はSwarmクラスタを構成することなく、できる場合があります。今回からその方法を紹介していきましょう。 - 第34回 Open vSwitchで作るDockerのネットワーク(OVSを知る編)
Dockerのネットワークを構成するには、さまざまな方法があります。今回からは、OpenStackなどクラウド基盤ソフトウェアでも広く採用されている「Open vSwitch」(OVS)を利用した方法を取り上げます。OVSの紹介から始めましょう。 - 第31回 Docker Swarmクラスタのオーバレイネットワークを構築する方法
複数の物理サーバで稼働するコンテナ同士の通信を可能にするには、Docker Swarmを用いたオーバレイネットワークを構築します。前回はその概要について解説しましたが、今回はこの環境を構築する方法を紹介します。 - 第30回 Docker Swarmを知る 複数の物理サーバでDocker環境をクラスタ化する方法
複数の物理サーバで稼働するDockerコンテナ同士が通信するには、どうすればよいのでしょうか。そのためには、Docker特有のコンポーネントを理解する必要があります。今回は、Docker環境のネットワーキングを実現するソフトウェアコンポーネントと具体的なコンテナ間の通信方法を紹介します。 - 第29回 Docker Networkingの基礎知識 標準的なネットワークを理解する
引き続きDocker環境におけるネットワーキングの基礎を解説します。今回は、Dockerでの標準的なネットワークを例に、手順を交えながらその構成がどうなっているのかを理解していきましょう。 - 古賀政純の「攻めのITのためのDocker塾」バックナンバー
Copyright © ITmedia, Inc. All Rights Reserved.