第26回 32ビット環境に迫る「2038年問題」 検証における5つの疑問:古賀政純の「攻めのITのためのDocker塾」(3/4 ページ)
前回は32ビット環境に忍び寄る「2038年問題」に触れました。Dockerを使った仮想環境での延命措置も期待されますが、実際のところはどうなのでしょうか。今回はその検証に向けた考察をしてみます。
ホストOS上になんらかの32ビット互換のソフトウェアが必要なのか?
次の疑問3では、試しにDockerコンテナtest0001上で「yum update -y」を実行し、Dockerコンテナ内のパッケージを更新してみましょう。以下は、Dockerコンテナ上で操作します。
bash-4.1# yum update -y ... ... libgcc_s.so.1(GCC_3.0) is needed by (installed) groff-1.18.1.4-21.el6.i686 libgcc_s.so.1(GCC_3.3.1) is needed by (installed) libnih-1.0.1-7.el6.i686 You could try running: rpm -Va --nofiles --nodigest Your transaction was saved, rerun it with: yum load-transaction /tmp/yum_save_tx-2016-02-17-05-43JuAfXA.yumtx
なにやらrpmコマンドに関連する警告メッセージのようなものが表示され、パッケージが更新できないはずです。64ビットのホストOS上で動く32ビットのOS環境のコンテナにおいてyumコマンドでパッケージをアップデートしようとすると、yumコマンドは、アーキテクチャが32ビットと64ビット両方に対応できるようになっている設定ファイルの仕組みによって、64ビット版のパッケージを入手しようとするため、パッケージが対応するCPUアーキテクチャに不一致が起こり、yumコマンドが終了してしまうのです。
64ビットのホストOS上で稼働する32ビット版のCentOSのDockerコンテナにおいて、アプリケーションを32ビットとして実行するには、「linux32」コマンド(linux32は、setarchコマンドのシンボリックリンク)を先頭に付与し、32ビットアーキテクチャを明示的に指定する必要があります。では、yumコマンドにlinux32を付与して実行し、確認してみます。
bash-4.1# linux32 yum update -y Loaded plugins: fastestmirror ... ... Complete! bash-4.1#
無事、32ビット版のRPMパッケージをインターネットから入手し、稼働中の32ビット版のCentOS 6のDockerコンテナのパッケージをアップデートできました。このように、linux32を付与すれば、64ビットのホストOS上でも、32ビット版のDockerコンテナで32ビット版のコマンドを実行できます。linux32(実体はsetarchコマンド)は、unameコマンドの出力を変更するユーティリティであり、Docker環境に限らず、64ビット環境で32ビットアプリを実行する場合に利用されます。
「linux32」なしでは32ビット環境を利用できない?
旧システムからの移行や古いアプリを稼働させる場合、できるだけ手間を省いて改変を少なくしたいものです。このままでは、linux32コマンドを付与するようにアプリやスクリプトを改変する必要があります。これでは、移行に関する手間が非常に増えてしまいます。
そこで、以下のように、Dockerコンテナの起動時に、「/bin/bash」を起動するのではなく、「/usr/bin/linux32 /bin/bash」を指定します。これにより、32ビットのDockerコンテナ内でlinux32コマンドを付与せずに、CPUアーキテクチャに依存するコマンドを実行できます。
# docker run -it --rm --name test0002 tenforward/centos-i386 /usr/bin/linux32 /bin/bash bash-4.1# getconf LONG_BIT 32 bash-4.1# yum update -y ... ... Complete! bash-4.1#
Dockerコンテナの起動時にCPUアーキテクチャを明示的に指定するlinux32を付与すれば、Dockerコンテナのユーザー側に対して、CPUアーキテクチャに依存する追加の操作やスクリプト、アプリの改変の負担を減らせます。
関連記事
- 第25回 32ビット環境に迫る「2038年問題」 時計がおかしくなると……
いまだ数多くのシステムで32ビットのOSやアプリケーションが使われていますが、実は深刻な影響が懸念される「2038年問題」を抱えています。将来どのような影響が出るのかについて、今回から「Docker」による検証を先取りしていきます。 - 第14回 「延命措置」で旧システムからDocker環境に移行する方法
古いIT資産をDocker環境へ移行するには多面的な検証が必要です。今回は「延命措置」のシナリオから、実際に古い物理サーバからDocker環境へ移行する手順を紹介します。 - 第9回 Dockerfileで“インフラストラクチャ・アズ・コード”を体験
“攻めのIT”を考える情シスリーダーが今後知っておくべき注目の技術「Docker」を基本から応用まで解説します。今回のテーマは「Dockerfileでインフラストラクチャ・アズ・コードを実体験」です。 - 【古賀政純の「攻めのITのためのDocker塾」】バックナンバー
Copyright © ITmedia, Inc. All Rights Reserved.