第24回 非Linux環境のDocker FreeBSDで実際に動かしてみると……古賀政純の「攻めのITのためのDocker塾」(7/7 ページ)

» 2016年06月15日 08時00分 公開
前のページへ 1|2|3|4|5|6|7       

FreeBSDのLinuxバイナリ互換機能を無効にしてみる

 ためしに、ホストOSとして稼働しているFreeBSDのLinuxバイナリ互換機能を無効にし、Dockerコンテナが起動できないことを確認してみましょう。Linuxバイナリ互換機能は、以下のカーネルモジュール4つを組み合わせて提供されます。


# kldstat | grep lin
 5    1 0xffffffff81e17000 37ae0    linux64.ko
 6    3 0xffffffff81e4f000 682c     linux_common.ko
 8    1 0xffffffff81e89000 9fba     linprocfs.ko
 9    1 0xffffffff81e93000 5639     linsysfs.ko

 この機能を無効にしますが、先にホストOS上で、起動している全てのDockerコンテナを停止します。


# docker rm -f test01
# docker rm -f test02
...

 次に、ホストOSのカーネルモジュール「linux64.ko」をアンロードします。


# kldunload linux64

 FreeBSD上で、一時的にLinuxバイナリが実行できなくなりました。この状態で、CentOS 7.2のDockerコンテナの起動を試みます。コンテナ起動時に「/bin/bash」を指定しますので、この「/bin/bash」の起動に失敗するはずです。


# docker run -it --rm --name test02 c7:newest /bin/bash
ELF binary type "0" not known.
ELF binary type "0" not known.
jail: exec /bin/bash: Exec format error
jail: /bin/bash: failed

 エラーが表示され、CentOS 7.2のDockerコンテナの起動時の「/bin/bash」の実行に失敗していることが分かります。再びホストOSのカーネルモジュール「linux64.ko」を読み込んで、CentOS 7.2のDockerコンテナが起動できるかを確認します。


# kldload linux64
# kldstat |grep lin
 6    3 0xffffffff81e4f000 682c     linux_common.ko
 8    1 0xffffffff81e89000 9fba     linprocfs.ko
 9    1 0xffffffff81e93000 5639     linsysfs.ko
10    1 0xffffffff81e17000 37ae0    linux64.ko


# docker run -it --rm --name test02 c7:newest /bin/bash
[root@ /]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

 このように、OSアーキテクチャの差異を吸収するための「バイナリ互換機能」によって、ホストOS(FreeBSD)で別のOS(Linux)のバイナリを稼働させることができます。このことから、逆に疑問4の「LinuxがホストOSの場合、FreeBSDのDockerコンテナは動くのだろうか?」について、何に注目すればよいかが見えてきます。そう、Linux OS側にFreeBSDのバイナリ互換機能があるかどうかです。これについては、Docker塾の塾生の皆さんへの宿題にしておきます。

 ちなみに、疑問5に対する答えですが、FreeBSDのホストOS上でも、FreeBSDのDockerイメージを入手し、Dockerコンテナとして稼働させることができます。以下にその手順を掲載しておきます。


# docker pull lexaguskov/freebsd
# docker run -it --rm --name test03 lexaguskov/freebsd:latest /bin/csh
# freebsd-version
10.1-RELEASE
# exit

 以上で、FreeBSDにおけるDockerコンテナの稼働についてご紹介しました。FreeBSDのような非Linux環境でのDockerというと、「見慣れないコマンドも多いし、制限事項も多そうだし、なんだか難しそう……」というイメージがどうしてもつきまといます。

 Docker on FreeBSDは、基本コマンドだけでなく、細かいオプションの挙動においても、あやしい部分が多々ありますが、今後の発展が大いに期待されます。最近は、IoTによる電子機器とITシステムの連携も視野に入れた開発が必要になってきており、電子機器で稼働するBSD系のOSと、サーバなどのITシステムで稼働するFreeBSDやLinuxシステムとのシームレスなデータ相互利用も必要になってきます。Linuxで動作するDocker環境とFreeBSDで動作するDocker環境の同時利用における課題も見えてくると思います。

 皆さんも小規模なテスト環境で構いませんので、FreeBSDなどの非Linux系OSにおけるDocker環境を実際にインストールし、Linux環境との混在やIoT機器における活用などを是非検討してみてください。

古賀政純(こが・まさずみ)

日本ヒューレット・パッカード株式会社 オープンソース・Linuxテクノロジーエバンジェリスト。兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国HPからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は日本HPにて、Linux、FreeBSD、Hadoopなどのサーバー基盤のプリセールスSE、文書執筆を担当。Red Hat Certified Virtualization Administrator, Novell Certified Linux Professional, Red Hat Certified System Administrator in Red Hat OpenStack, Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「CentOS 7実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード。

古賀氏の最新記事が読めるブログはこちら


前のページへ 1|2|3|4|5|6|7       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ