オフィシャルイメージが存在しないCentOSコンテナを作る

DockerHub でオフィシャルイメージを検索しても
欲しいディストリの バージョンがありませんでした。なんてことありませんか?

お仕事で必要になったCentOSコンテナが 5.1 だったのですが
そんな状態になってしまったので 0 からコンテナを作ってみました。

参考にしたのは以下のサイト。
非常によくまとまっています。
http://knowledge.sakura.ad.jp/tech/2226/


実際にコンテナを動作させたいDockerが動いているOSを準備します。
今回はUbuntu14.04 上で動作するDockerに乗せたいため、そこで作業します

以下の手順で フォルダ内にOSのベースイメージを準備します。
なお、Ubuntu ではデフォルトで yum は入っていないため事前にインストールしておきます
※すべてrootで作業してます

apt-get install -y yum

mkdir -p ~/docker-image/centos5.1
cd  ~/docker-image/centos5.1

vi  centos5.1.yum.conf
-----
[main]
cachedir=/var/cache/yum/x86_64/5.1
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=0
plugins=1

[base]
name=CentOS-5 - Base
baseurl=http://vault.centos.org/5.1/os/x86_64/

[updates]
name=CentOS-5 - Updates
baseurl=http://vault.centos.org/5.1/os/x86_64/
-----

yum -c centos5.1.yum.conf repolist all
yum -c centos5.1.yum.conf ––installroot=/root/docker-image/centos5.1 groupinstall -y Core

yum -c centos5.1.yum.conf ––installroot=/root/docker-image/centos5.1 -y install yum
※CentOS5.1の時はデフォルトでyumがインストールされていないため、
 ベースイメージ作成時にインストールしておきます

cd centos5.1/dev/
mknod -m 666 null c 1 3
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8
mknod -m 666 urandom c 1 9
mkdir -m 755 pts
mkdir -m 1777 shm
mknod -m 666 tty c 5 0
mknod -m 666 tty0 c 4 0
mknod -m 666 tty1 c 4 1
mknod -m 666 tty2 c 4 2
mknod -m 666 tty3 c 4 3
mknod -m 666 tty4 c 4 4
mknod -m 600 console c 5 1
mknod -m 666 full c 1 7
mknod -m 600 initctl p
mknod -m 666 ptmx c 5 2

cd ../

※必要に応じてyum設定も書き換えます
 初期状態だと接続可能なリポジトリがありません。
vi /etc/yum.repos.d/CentOS-Base.repo
----
# update時にディストリのバージョンが変わってしまうのを防ぐため
# mirrorlist を無効にしてあります

[base]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/5.1/os/x86_64/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=0
enabled=1
gpgkey=http://vault.centos.org/5.1/os/x86_64/RPM-GPG-KEY-CentOS-1

#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://vault.centos.org/5.1/updates/x86_64/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=0
enabled=1
gpgkey=http://vault.centos.org/5.1/os/x86_64/RPM-GPG-KEY-CentOS-5

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/5.1/extras/x86_64/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
gpgcheck=0
enabled=1
gpgkey=http://vault.centos.org/5.1/os/x86_64/RPM-GPG-KEY-CentOS-5

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://vault.centos.org/5.1/centosplus/x86_64/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
gpgcheck=0
enabled=1
gpgkey=http://vault.centos.org/5.1/os/x86_64/RPM-GPG-KEY-CentOS-5

----

cd ../
tar -c . | docker import - moremagic/centos:5.1

※テスト実行。こんな感じで。
docker run -ti moremagic/centos:5.1 /bin/bash

※dockerhubに登録します
docker push moremagic/centos:5.1

こんな感じで オフィシャルイメージが無くても作れるんですね。

とりあえず CentOS 5.1、5.9、6.2 を作ってみました。
良かったら使ってみてください。
https://registry.hub.docker.com/u/moremagic/centos/


追記 2016/4/22;

久しぶりに上記手順を実行したところ以下のエラーが出てうまくいきませんでした。

 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Disable the repository, so yum won't use it by default. Yum will then
        just ignore the repository until you permanently enable it again or use
        --enablerepo for temporary usage:

            yum-config-manager --disable <repoid>

     4. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

Cannot find a valid baseurl for repo: extras/$releasever/x86_64

いろいろもがいてみた結果、group install 前に以下のコマンドを打つと
成功しました。原因は不明。

yum -c centos5.1.yum.conf repolist all

とりあえず上記手順内にこのコマンドを含めました。