第26回 32ビット環境に迫る「2038年問題」 検証における5つの疑問:古賀政純の「攻めのITのためのDocker塾」(4/4 ページ)
前回は32ビット環境に忍び寄る「2038年問題」に触れました。Dockerを使った仮想環境での延命措置も期待されますが、実際のところはどうなのでしょうか。今回はその検証に向けた考察をしてみます。
32ビット版OS用のDockerfileは、64ビット版と同じ?
疑問4について、32ビット版OSのテンプレートOSイメージを使って、Dockerfileによるアプリ入りDockerイメージを作成する場合、どのような注意が必要でしょうか。Dockerfileにおいて、Dockerイメージをビルドする際に実行する一般的なコマンドは、RUN行で記述しますが、32ビット版CentOSのテンプレートOSイメージを使う場合、RUN行で指定するコマンドには、linux32を付与する必要があります。
以下に、32ビット版のCentOS 6.xのDockerイメージを入手し、yumコマンドでRPMパッケージを最新版に更新するDockerfileのサンプル、ビルド手順、コンテナの実行例を掲載します。RUN行において、yumコマンドの実行時にlinux32を指定していることに注意してください。また、Dockerコンテナ起動時に実行されるコマンドを記述するENTRYPOINTの行では「/usr/bin/linux32」を付与して「/bin/bash」が起動するように指定していることにも注意してください。
# mkdir /root/centos6-i386-latest # cd /root/centos6-i386-latest # vi Dockerfile FROM tenforward/centos-i386:latest MAINTAINER Masazumi Koga ENV container docker RUN echo "proxy=http://proxy.yoursite.com:8080" >> /etc/yum.conf ←プロキシサーバーを指定 RUN /usr/bin/linux32 yum update -y && /usr/bin/linux32 yum clean all ←パッケージの更新 ENTRYPOINT ["/usr/bin/linux32","/bin/bash"] ←コンテナ起動時にlinux32を付与してbashを起動する
このように、「インフラストラクチャ・アズ・コード」の醍醐味である「手順書のコード化」によって、Dockerfileを見るだけで構築しようとしているOSとアプリ環境が32ビットなのか、64ビットなのかが一目瞭然です。インフラストラクチャ・アズ・コードとDockerfileついては、連載第8回と第9回で解説していますので、ぜひ参照してください。では、実際に32ビット版のOSテンプレートを使って、Dockerイメージをビルドします。今回、Dockerイメージ名は、「c6-i386-01」としました。
# docker build -f ./Dockerfile -t c6-i386-01 --no-cache=false . # docker images REPOSITORY TAG IMAGE ID CREATED SIZE c6-i386-01 latest aa5cabf2f8ad 14 minutes ago 871.3 MB
作成したDockerイメージ「c6-i386-01」から、コンテナtest0003を起動します。
# docker run -it --rm --name test0003 c6-i386-01:latest bash-4.1# getconf LONG_BIT 32 bash-4.1# cat /etc/redhat-release CentOS release 6.8 (Final)
これで、Docker環境においても32ビットのOS環境を稼働させることができました。CentOSだけでなく、2016年4月にリリースされたばかりのUbuntu 16.04 LTSや、Debian 8.0の32ビット版Dockerイメージも用意されていますから、これらも試してみてください。
今回は、DockerコンテナがCentOS 6.xの場合でした。DockerコンテナがUbuntuやDebianの場合、linux32を付与せずにパッケージの更新(apt-get upgrade)を行うとどうなるのかも試してみましょう。32ビット版Ubuntu 16.04のDockerコンテナの起動方法とパッケージ更新までの確認手順を以下に示しておきます。
32ビット版Ubuntu 16.04 LTSのDockerコンテナ上でパッケージを更新する手順: # docker run -it --name test0001 i386/ubuntu /bin/bash root@f4fc7c751c8c:/# getconf LONG_BIT 32 root@f4fc7c751c8c:/# cat /etc/os-release |grep VERSION VERSION="16.04 LTS (Xenial Xerus)" VERSION_ID="16.04" root@f4fc7c751c8c:/# apt-get update && apt-get upgrade -y
次回は最後の「疑問5」を含め、ここまで確認した環境を利用して「2038年問題」を検証してみます。
古賀政純(こが・まさずみ)
日本ヒューレット・パッカード株式会社 オープンソース・Linuxテクノロジーエバンジェリスト
兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国HPからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は日本ヒューレット・パッカードにて、Linux、FreeBSD、Hadoop、Dockerなどのサーバー基盤のプリセールス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実践入門」などがある。趣味はレーシングカートとビリヤード。
古賀氏の最新記事が読めるブログはこちら。
関連記事
- 第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.