仕事で急遽 32bit版の CentOS6
が必要になったのでメモ
Docker Hub からイメージを pull する
$ docker pull i386/centos:6
- CentOS の公式ビルドから作られたイメージ
- こちらでサポートされている
GitHub - CentOS/sig-cloud-instance-images: CentOS cloud images
動作確認
$ docker run -it --rm i386/centos:6 /bin/bash
[root@dcf50c6c410b /]# cat /etc/redhat-release
CentOS release 6.10 (Final)
[root@dcf50c6c410b /]# date
Sun Jun 16 03:31:41 UTC 2019
# DockerコンテナはホストOSのカーネルを使って動作するためマシンネームは x86_64 で表示される
[root@dcf50c6c410b /]# uname -a
Linux dcf50c6c410b 4.9.93-boot2docker #1 SMP Thu Jul 19 18:29:50 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@dcf50c6c410b /]# uname -m
x86_64
# 実際は 32bit
[root@dcf50c6c410b /]# getconf LONG_BIT
32
# インストールされているパッケージは 32bit版だが、リポジトリの向き先が 64bit版になっている
# repo ファイルの $basearch の値が x86_64 になっているため
[root@dcf50c6c410b /]# yum list | grep '^rpm\.'
rpm.i686 4.8.0-59.el6 @CentOS/6.10
rpm.x86_64 4.8.0-59.el6 base
# 直接 32bit版のリポジトリを指定すると期待した動作となる
[root@dcf50c6c410b /]# sed -i 's/$basearch/i386/g' /etc/yum.repos.d/CentOS-*.repo
[root@dcf50c6c410b /]# yum clean all
Loaded plugins: fastestmirror, ovl
Cleaning repos: base extras updates
Cleaning up Everything
Cleaning up list of fastest mirrors
[root@dcf50c6c410b /]# yum list | grep '^rpm\.'
rpm.i686 4.8.0-59.el6 @CentOS/6.10
このイメージの使い方
このような Dockerfile
でベースイメージを作成してから使うのが良さそう
Dockerfile
FROM i386/centos:6
RUN sed -i 's/$basearch/i386/g' /etc/yum.repos.d/CentOS-*.repo && \
ln -sf /usr/share/zoneinfo/Japan /etc/localtime
-
uname -m
で動作環境を判定してるスクリプトを動かす場合は修正が必要