第39回 DHCPとpipeworkでDockerコンテナに動的IPアドレスを付与する(構築編その2):古賀政純の「攻めのITのためのDocker塾」(2/2 ページ)
Open vSwitch(OVS)を構築したホストOS上で、ソフトウェア定義型ネットワークを実現する「pipework」を利用し、DHCPクライアントの機能を使って、Dockerコンテナに動的にIPアドレスを割り当てる手順を紹介します。
今回、サーバ2号機は、非OVS環境であるため、ホストOSのeth0を使って、DHCPサーバコンテナがサービスを提供します。ですので、DHCPサーバコンテナの起動時には、ホストOSのeth0を指定しています。もしホストOS側で、LinuxブリッジやOVSブリッジを構成している場合は、そのブリッジ名を指定します。以下は、DHCPサーバコンテナが稼働するホストOSで、OVSブリッジ(ブリッジ名を br-exとした場合)を構成した場合のDHCPサーバコンテナの起動例です。
# docker run \ -itd \ --net=host \ -v /data:/data \ --name d1 \ -h d1 \ networkboot/dhcpd br-ex ←ホストOSのLinuxブリッジ、または、OVSブリッジ(br-ex)を指定
以上でDHCPサーバコンテナd1が起動しましたので、ホストOSから確認します。
# docker ps -a CONTAINER ID IMAGE COMMAND ... STATUS ... NAMES 6d25c756c900 networkboot/dhcpd "/entrypoint.sh eth0" ... Up 34 minutes ... d1
DHCPサーバコンテナによるIPアドレスの付与状況は、/data/dhcpd.leases ファイルに記録されますので、このファイルをホストOSのコマンドラインからtailコマンドで監視しておきます。
# tail -f /data/dhcpd.leases ...
pipeworkのDHCPクライアント機能を試してみる
pipeworkの稼働の前提条件として、この連載の第35回で紹介した内容を元に、サーバ1号機のホストOSにOpen vSwitch(OVS)とDockerエンジンをインストールしておいてください(※)。
※補足
連載35回では、OVSをインストールするにあたり、2017年1月時点でのOpenStackコミュニティのバージョン「Newton」に対応したリポジトリを追加する方法をご紹介しましたが、2017年3月時点では、以下のように、OpenStackの最新バージョン「Ocata」に対応したリポジトリを追加することで、OVSの最新パッケージをインストールできます。
# yum install -y \ https://repos.fedorapeople.org/repos/openstack/openstack-ocata/rdo-release-ocata-2.noarch.rpm
では、いよいよ、pipeworkによるDHCPクライアント機能を使って、コンテナc3に動的IPアドレスを割り当てます。ネットワークインタフェースを付与しない状態でコンテナc3を起動します。
# docker run \ -itd \ --name=c3 \ -h c3 \ --net=none \ centos:6.8 \ /bin/bash
以下は、OVSブリッジ「br-ex」が利用可能なホストOSにおいて、稼働中のコンテナc3に、「eth0」という仮想NICに動的IPアドレスを割り当て、MACアドレスとして「00:01:02:03:04:07」を設定する例です。
# pipework \ br-ex \ ←ホストOSのOVSブリッジインタフェース -i eth0 \ ←コンテナ内に作成する仮想NIC c3 \ ←コンテナ名 dhclient \ ←pipeworkが提供するDHCPクライアント機能を利用 00:01:02:03:04:07 ←コンテナc3のeth0に割り当てるMACアドレス
DHCPサーバコンテナd1により、コンテナc3に動的IPアドレスが付与されると、物理サーバ2号機の /data ディレクトリにある dhcpd.leases ファイルに情報が記録されますの
で、中身を確認します。
# tail -f /data/dhcpd.leases ... lease 172.16.1.2 { ←IPアドレス「172.16.1.2」が付与されたことがわかる starts 3 2017/03/08 06:55:55; ends 3 2017/03/08 08:55:55; cltt 3 2017/03/08 06:55:55; binding state active; next binding state free; rewind binding state free; hardware ethernet 00:01:02:03:04:07; }
上記より、DHCPサーバコンテナのd1によって、172.16.1.2/16という動的IPアドレスが付与されたことがわかります。サーバ1号機で稼働するコンテナc3のIPアドレスとMACアドレスを確認します。
# docker exec -it c3 ifconfig eth0 |head -2 eth0 Link encap:Ethernet HWaddr 00:01:02:03:04:07 inet addr:172.16.1.2 Bcast:172.16.255.255 Mask:255.255.0.0
DHCPサーバコンテナd1によって、コンテナc3に動的IPアドレスを付与することができました。付与された動的IPアドレスを持つDockerコンテナにWebサーバなどを構築し、クライアントから動的IPアドレスを指定してアクセスできるかを確認してください。
古賀政純(こがまさずみ)
日本ヒューレット・パッカード オープンソース・Linuxテクノロジーエバンジェリスト。兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国ヒューレット・パッカードからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は日本ヒューレット・パッカードにて、Hadoop、Spark、Docker、Linux、FreeBSDなどのサーバー基盤のプリセールスSE、文書執筆を担当。日本ヒューレット・パッカードが認定するオープンソース・Linux テクノロジーエバンジェリストとして、メディアでの連載記事執筆、講演活動なども行っている。Red Hat Certified Virtualization Administrator, Novell Certified Linux Professional, Red Hat Certified System Administrator in Red Hat OpenStack, Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「OpenStack 実践ガイド」「Docker 実践ガイド」「CentOS 7実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード。古賀氏の最新記事が読めるブログはこちら。
関連記事
- 第38回 pipeworkでDockerコンテナに固定IPアドレスを付与する(構築編その1)
ソフトウェア定義型ネットワークを実現する「pipework」のコンテナを実際に使って、ホストOSとDockerコンテナを同一LANセグメントに所属させることで、マルチホストのコンテナ間通信を行う手順を解説します。 - 第37回 Dockerでソフトウェア定義型ネットワーキングツール「pipework」を活用する
前回まで、3回に渡ってOpenStackでも利用されているソフトウェア定義型ネットワーキングを実現するOpen vSwitch(OVS)とovs-dockerを使ってホストOSとコンテナを同一LANセグメントに所属させ、マルチホストのコンテナ間通信を実現しました。今回は、Docker基盤で古くから利用されている「pipework」を使ったネットワーキングをご紹介します。 - 第35回 Open vSwitchで作るDockerのネットワーク(OVSで構築する編)
Dockerでは、OpenStackなどクラウド基盤ソフトウェアでも広く採用されている「Open vSwitch」(OVS)を利用してネットワークを構築することができます。今回は、実際にOVSを利用したネットワークを構築してみましょう。 - 第36回 Open vSwitchで作るDockerのネットワーク(OVSを管理する編)
「Open vSwitch」(OVS)を利用したDockerネットワークの特徴や構築方法について解説してきました。今回は、構築したネットワークを管理するためのコマンドやツールをご紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.