第26回 32ビット環境に迫る「2038年問題」 検証における5つの疑問古賀政純の「攻めのITのためのDocker塾」(4/4 ページ)

» 2016年07月27日 08時00分 公開
前のページへ 1|2|3|4       

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実践入門」などがある。趣味はレーシングカートとビリヤード。

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


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ