疑問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年問題」 時計がおかしくなると……
第14回 「延命措置」で旧システムからDocker環境に移行する方法
第9回 Dockerfileで“インフラストラクチャ・アズ・コード”を体験Copyright © ITmedia, Inc. All Rights Reserved.