Scientific Linux 7.0, 7.1 の Docker ベースイメージを作る
タイトルのまんまですが、ScientificLinux 7.0, 7.1用の Dockerベースイメージを作りました。 一年くらい前に6.5のものを使っ他やり方(Scientific LinuxのDockerイメージを作成する - リジェクトされました)でつくろうとしたらうまく行かなかったのでメモしておこうと思います。
まず、Scientific Linux 7.0/7.1 の VirtualBox イメージを準備しましたが、これはまた別の機会に書こうと思います。 ということで、VMのイメージはこれ(ringo | Atlas by HashiCorp )を使います。
作成したコンテナはこちら(Docker Hub )
Scientific Linux の Docker ベースイメージを作成
Vagrantfile を作成する
まず、ベースとなるVagrantfileを作成します。
特にかわったことはしていません。
vboxに ringo/scientific-linux-7.0
を指定しています。
このイメージを作成する元のスクリプトはこちらです。
あと、 provision
に build.sh
を指定しています。
VAGRANTFILE_API_VERSION = '2' Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = 'ringo/scientific-linux-7.0' config.vm.network 'private_network', ip: '192.168.33.11' config.vm.provision :shell, :path => 'build.sh' end
Build.sh を作成する
ここにDockerイメージを作成するメインの処理を書きます。
作成するためのコマンドは以前と異なり、 febootstrap
コマンドに代わって supermin5
コマンドを使います。
普通に yum install -y supermin
をしてしまうと1.4系が入ってしまうので注意。
--prepare
オプションでインストールしておきたいパッケージを指定します。
今回は yum
のみ。あとは、フォーマットに chroot
を指定してビルドするだけ。
# Install supermin yum update -y && yum install -y supermin5 # Build supermin5 --prepare yum -o supermin.d && \ supermin5 --build --format chroot supermin.d -o appliance.d
Locale や I18N を削除
ココらへんを削除するとコンテナのサイズが軽くなります(supermin - fedoraのDockerイメージを作成する - Qiita )
# Remove locales readonly LOCALE_DIR=${CMD_PATH}/appliance.d/usr/share/locale mv ${LOCALE_DIR}/en ${LOCALE_DIR}/en_US /tmp && \ rm -rf ${LOCALE_DIR}/* && \ mv /tmp/en /tmp/en_US ${LOCALE_DIR}/ # Remove i18ns readonly I18N_DIR=${CMD_PATH}/appliance.d/usr/share/i18n/locales mv ${I18N_DIR}/en_US /tmp && \ rm -rf ${I18N_DIR}/* && \ mv /tmp/en_US ${I18N_DIR}/
Tarball の作成
tar
で固めて圧縮します。それだけ。
# Create tarball and compress cd ${CMD_PATH}/appliance.d && tar --create . | xz --best > /vagrant/scientific-linux_${VERSION}_x86_64.tar.xz
コンテナを作成して Docker Hub にプッシュ
# Install the docker curl -sSL https://get.docker.com/ | sh # docker import and push cat /vagrant/scientific-linux_${VERSION}_x86_64.tar.xz | docker import - ringo/scientific:${VERSION} && \ docker push ringo/scientific:${VERSION}
yum update するとマイナーバージョンが上がってしまう
7.0をわざわざ入れる人は7.0を使いたいというモチベーションがあって入れるわけなので、lockしてあげたかったけど、
やり方がよくわからなかったので、最終的には yum
実行時に --releasever
で指定することにした。
色々試した
/etc/yum/vars/releasever
に色々書いてみて実験した。
7.0
と書いてみると、7.1
にアップグレードされた。
70
と書いてみると、やはり 7.1
にアップグレードされた。
/etc/yum/vars/slreleasever
に色々書いてみて実験した。
7.0
と書いてみると、 /etc/yum/vars/releasever
ができて 7
が書かれてた。
そのまま、もう一度 yum update
したら 7.1
にあがる。
70
と書いてみると、エラーになってしまう。
他にもなにかやった気がするけど、忘れた。