Docker専用OSとしてメジャーになってきたAtomicHostを使おうと思ったら、Projectが公開しているboxを利用するのが簡単。
http://www.projectatomic.io/download/
ここからお好きなBox取得すると簡単にvagrant up出来ます。
しかし、Defaultで10GBの容量はもう少し増やしたいし、キーボードも日本語キーボードを利用したい、
とか、とかとか
と言う事で、Installable ISOでVirtualBoxへインストール、そしてBaseBoxを作成してみたいと思います。
今回はCentOS Atomic Hostで。
CentOS Atomic Host Installable ISO
http://cloud.centos.org/centos/7/atomic/images/CentOS-Atomic-Host-7-Installer.iso
上のISOをダウンロードしてVirtualBoxでインストールを実施します。
ポイントとしては、
- Disk容量を30GB (標準は10GB)
- rootパーティションを10GB(標準は3GB)
- キーボード、タイムゾーンを日本語対応
但し、下記は実施しない。
- Guest Additions のインストール
- yumアップデート等 (そもそもyum入ってないし)
因みに、Atomic Hostといっても、実際にはVirtualBoxのBaseBox作成の備忘と言う事で、AtomicHostに特化した内容はほとんど無いです。。。
さて、ではサクッと行きます。
前提環境
- ホストマシン:MacBookAir OSX Yosemite(10.10.4)
- VirtualBox:5.0.0r101573
- Vagrant:1.7.4
- CentOS AtomicHost:7.1.2
インストール前の準備(VirtualBoxでの作業)
- 新規仮想マシンの作成
- 名前:atomichost-base
- メモリーサイズ
- 512MB
- ハードディスク
- 仮想ハードディスクを作成する
- タイプ:VDI
- 可変サイズ
- ファイルサイズ:30GB
- CDドライブ(コントローラIDE)
- ダウンロードしたISOファイルを指定
- ネットワーク
- NAT
-
- ポートフォワーディング
- 名前: SSH
- プロトコル:TCP
- ホストIP:127.0.0.1
- ホストポート:2222
- ゲストIP:10.0.2.15
- ゲストポート:22
- その他
- USB無効
- オーディオ無効
* ネットワーク ![スクリーンショット 2015-09-16 0.06.29.png](https://qiita-image-store.s3.amazonaws.com/0/93508/38718629-1416-d9f4-d712-f67cd84cc85d.png) ※デフォルトで表示される以外のNICは追加しない事 ※ボタンを「ON」にして起動時に利用可能なようにする
- 日本語キーボード、タイムゾーンja_JPを選択
- アカウント:パスワード
- root:vagrant
- vagrant:vagrant
- インストール開始
インストールが完了したら、ISOイメージを仮想CDドライブから抜き、再起動します。
インストール後の設定
ネットワーク設定
AtomicHostでは標準状態で以下のNICが設定されています。
[vagrant@localhost ~]$ sudo nmcli d
DEVICE TYPE STATE CONNECTION
docker0 bridge connected docker0
enp0s3 ethernet connected enp0s3
lo loopback unmanaged --
ネットワークの設定はBox化した後にVagrantfileで指定出来るので、BaseBoxは汎用性を持たせるためにこのままにします。
MACアドレスとUUIDを無効化
Vagrantfileでネットワークを設定する際に悪さをすることがあるので、以下を実行。
sed -i -e "s:HWADDR=.*::g" /etc/sysconfig/network-scripts/ifcfg-enp0s3
sed -i -e "s:UUID=.*::g" /etc/sysconfig/network-scripts/ifcfg-enp0s3
SSHの設定
- UseDNSを無効化
sed -i -e "s:^#UseDNS yes:UseDNS no:" /etc/ssh/sshd_config
- vagrantユーザ用の公開鍵を配置
下記からvagrant公開鍵とプライベート鍵を取得
https://github.com/mitchellh/vagrant/tree/master/keys/
su - vagrant
mkdir ~/.ssh
chmod 0700 ~/.ssh
curl -L -o ~/.ssh/authorized_keys https://github.com/mitchellh/vagrant/blob/master/keys/vagrant.pub
chmod 0600 ~/.ssh/authorized_keys
プライベート鍵はホストに設置
vagrantユーザーの権限
sudoをパスワード無しで実行出来るように変更
echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
requiretty を無効化
sed -i -e "s:^.*requiretty:#Defaults requiretty:" /etc/sudoers
#### rootパーティションの容量変更 参考:https://access.redhat.com/ja/node/1275093#storage_default
AtomicHostではdockerのイメージなどはdocker-pool と呼ばれるコンテナーイメージパーティションに保存されます。インストール時にパーティションを自動設定にした場合、rootパーティションに3GBが割り当てられ、残りが全てdocker-poolに割り当てられます。
(AtomicHostのファイル周りはとても面白いので、上記の参考ページやProject本家のページなどは一度読まれると良いかと思います。)
今回は30GBのDiskを生成したので、下記のようになっています。
bash-4.2# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
docker-pool cah twi-a-tz-- 25.12g 0.04 0.43
root cah -wi-ao---- 3.00g
swap cah -wi-ao---- 1.03g
※VG(ボリュームグループ)はホスト名から自動で設定されます。ホスト名を指定していない場合は「cah」となります。
コンテナのビルドなどは別なマシンで行うか、docker hubからpullするだけであればこれでも問題は無いのですが、この仮想マシンでコンテナのビルドを行う場合などに、大きなファイルを解凍したり何か作業をした場合、以外と3GBは直ぐに一杯になってしまいます。
そこで、rootパーティションを拡張します。
インストール後にrootパーティションのサイズを変更する場合には以下の方法があります。
- ストレージを追加
- rootパーティションを拡張(docker-poolを縮小)
今回は2番目の方法でやってみます。
※但し、この方法の場合はdocker-poolの中身が削除されますので、既にコンテナイメージなどがある場合は、docker hubなどに退避して下さい。
# systemctl stop docker docker-storage-setup
# rm -rf /var/lib/docker/*
# lvm lvremove cah/docker-pool
# lvextend -L +7GB /dev/mapper/cah-root
# systemctl start docker-storage-setup
# systemctl start docker
最後のファイルシステムの拡張を忘れていました。。。
# xfs_growfs /dev/mapper/cah-root
※今回使用したのは7系のため、resize2fs
ではだめで、xfs_growfs
を利用します。
これで、rootパーティションが10GBになり、docker-poolがその分少なくなりました。
bash-4.2# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
docker-pool cah twi-aotz-- 18.27g 0.06 0.34
root cah -wi-ao---- 10.00g
swap cah -wi-ao---- 1.03g
ここまででVirtualBoxでの作業は終了
BaseBoxの作成
上記で作成した仮想マシンからBaseBoxに変更します。
仮想マシンのvdiがあるディレクトリへ移動しパッケージ化
# cd ~/VirtualBox VMs/atomichost-base
# vagrant package --base atomichost-base --output atomichost-base.box
atomichost-base.boxと言うBaseBoxが出来上がりました。
後はいつもどおり、
# vagrant box add AtomicHost atomichost-base.box
# vagrant init AtomicHost
# vagrant up
として、ネットワーク、ホスト名、共有フォルダなどをVagrantfileで指定すれば出来上がりです。
※作成したBoxは圧縮とかしてもう少し整理したらどこかにアップしようと思います。
参考
http://d.hatena.ne.jp/banrui/20140702/1404311383
http://momijiame.tumblr.com/post/77460699382/vagrant-%E3%81%AE-virtualbox-%E7%94%A8-base-box-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%89%8B%E5%8B%95%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B