Docker on RHEL & !
Project Atomic 入門
Haruka Iwao
Docker Meetup #4
2015/01/17
おことわり
•  正確な情報を提供するように努めていま
すが、無保証です。
•  必ずしも会社の公式見解ではありません
•  製品の正確な情報が必要な場合は、レッ
ドハットにお問い合わせください
わたしはだれ?
•  岩尾 はるか (@Yuryu)
•  レッドハットで働いています
– ストレージソリューションアーキテクト兼ク
ラウドエヴァンジェリスト(何でもやる)
•  Final Fantasy XIV プレイヤー
– Carbuncle サーバー、学メイン
– バハ真成編4層をクリアしました
•  Ingress 緑エージェント(A11)
Linuxカーネル本(宣伝)
•  Linux Kernel Updates”
•  最新刊
– OOM Killer特集
– ジュンク堂池袋店で買
えます!
•  既刊
– Docker, TCP/IP特集など
– Kindle版売ってます
あらすじ
•  Red HatとDocker
•  Project Atomic
•  Try CentOS Atomic Host
•  デモ
Red HatとDocker
その前に
Fedora, RHEL, CentOS
•  代表的な3種類の「Red Hat系」Linuxディ
ストリビューション
Fedora, RHEL, CentOS比較
Fedora Red Hat
Enterprise
Linux
CentOS
開発主体 Fedora Project Red Hat CentOS Project
リリース間隔 およそ半年 3年∼3.5年 RHELに準ずる
メンテナンス期
間
およそ1年 10年+延長3年 10年
特徴 新機能をどんど
ん実装していく
Fedoraをもとに、
より堅牢、安定
化
RHELのソース
を元に、商標を
取り除き再ビル
ド
価格 無償 有償 無償
サポート なし あり なし
リリース間隔イメージ
=1年ちょっと
RHELとCentOSの関係
•  ソースコードレベルでは、商標の変更を
除いてほぼ同じ
•  機能は同じ。バグも同じ。
•  リリースは基本的にRHELが先
– 数週間程度ずれる
•  今日はRHELといいますが、おうちで試す
ときはCentOSでも同じです
– サポートが必要な場面ではRHELを買ってね!
Red HatとDocker
Red Hatの取り組み
•  RHELへの移植
•  Device mapper thin-provisioning への対応
– ディスク性能の向上
•  Systemd 統合
•  SELinux 対応
•  DockerConスポンサー
•  Kubernetes開発に参加
http://blog.docker.com/2014/06/keynote-videos-from-dockercon14/
Docker on RHEL
•  Red Hat Enterprise Linux 7ではDockerが
正式サポート
– 「Extras」チャンネルでの提供
– ミッションクリティカル非推奨
Extrasチャンネルとは
•  通常のRHELのパッケージは、一つのメ
ジャーバージョンの中ではrebaseしない
– 例えばRHEL7の間、Apacheのバージョンは
2.4.6のまま
– 新機能やバグ修正は都度マージ&テスト
•  Extrasはrebaseします
– 常に最新版を使っていただく状態を想定
– リリース間隔も短い
https://access.redhat.com/support/policy/updates/extras
ミッションクリティカル非推奨
•  頻繁にrebase、リリースされるので、す
ごく重要な場所には使わないでね
•  サポートが限定的
– Severity 3 (Medium)が最大になります
– 24/365 応答しません
•  個別にはご相談ください
•  RHEL 7.1からこの制限は無くなる予定
https://access.redhat.com/solutions/907283
コンテナの互換性
•  技術的な観点ではなく、サポートの可否
•  ホストとコンテナともにx86_64のみ
コンテナ ホスト サポート可否
RHEL 5以前 RHEL 7 ×
RHEL 6 RHEL 7 ○
RHEL 7 RHEL 7 ○
RHEL 以外
(CentOS, Ubuntu, etc…)
RHEL 7 ×
RHEL RHEL 以外 ×
続・コンテナの互換性
•  カーネルを載せ替えて、本当に大丈夫?
•  /proc や /sys に依存するアプリケーション
は、正しく動かないことも
•  システムコールの微妙な変更がアプリを
壊すことも
– 例: A kernel change breaks GlusterFS
– https://lwn.net/Articles/544298/	
  
•  RHELでは互換性を担保、サポート
Getting Started with Docker
•  RHEL 7でDockerを動かすチュートリアル
•  https://access.redhat.com/articles/881893	
  
•  CentOS 7でも基本的には同じ
– チャンネルは無いので、単に yum install
docker でインストールできる
– firewalld を disable & stop するのを忘れずに
Project Atomic
Project Atomic とは
•  Atomic Host を作っているプロジェクト
•  小さなOS+コンテナのためのツールを
セットで提供
•  コンテナのためのプラットフォーム
Project Atomic ベースのOS
•  Fedora Atomic
– Fedora と同じように、新機能開発のベース
•  Red Hat Enterprise Linux Atomic Host
– 商用版でサポート付きの安定版
– 現在ベータ版提供中
•  CentOS Atomic Host
– CentOSをベースにAtomic Hostの機能を追加
– RHEL Atomic Hostとは独自に開発(今のとこ)
Ubuntu Coreとの違い
•  Ubuntu Core
– コンテナイメージを作るための最低限のOS
– tarで提供され、Dockerにインポートして使う
– ホストOSでは無い
•  Atomic Host
– コンテナを実行するためのホストOS
– 仮想マシンイメージで提供される
– コンテナ内OSでは無い
Ubuntu Coreとの違い
•  Ubuntu Core
– コンテナイメージを作るための最低限のOS
– tarで提供され、Dockerにインポートして使う
– ホストOSでは無い
•  Atomic Host
– コンテナを実行するためのホストOS
– 仮想マシンイメージで提供される
– コンテナ内OSでは無い
初出時にSnappy Ubuntu Coreを見落として書いて
ありました。Ubuntu Coreはコンテナ用の最低限
のディスクイメージ、Snappy Ubuntu Coreは非常
に小さな最低限のUbuntuです。ただし、Dockerも
標準では付属せず、Dockerに限定しないものに
なっています。2015/01/17現在のalphaは、ディス
クイメージ109MB、メモリ消費量41MB、duで取
れるファイルシステム容量297MBでした。お詫び
して訂正します。
CoreOSとの違い
•  非常によく似ているライバル
•  標準ツール
– CoreOS: etcd, fleet
– Atomic Host: etcd, kubernetes
•  思想が少し違う
– CoreOS: 一からコンテナのために出発
– Atomic Host: 既存OSをコンテナに最適化
•  どっち使えばいいの?→Atomic Host好み
RHELとAtomic Hostの違い
•  yum が無い
•  OS自体はrpm-ostree でupgrade/rollback
•  Docker, etcd, Kubernetesが標準で入る
•  ファイルシステムが大部分読み込み専用
•  リリースサイクル、サブスクリプション
の詳細などは少しお待ちを…!
リソース消費量を比べてみた
メモリ ディスク(du /) 配布イメージ
CoreOS 46MB 329MB 112MB
(PXE gz)
RHEL 7 Atomic
Host Beta (※)
195MB 1.1GB 416MB
(qcow2 gz)
CentOS 7 Atomic
Host
144MB 1.2GB 271MB
(qcow2 xz)
CentOS 7 (※) 194MB 1.2GB 3.9GB
(iso)
boot2docker 152MB 113MB 23MB(iso)
ホスト: VirtualBox 4.3.20, VMware Fusion 7.1.0(※)
それぞれ起動直後でDockerを動かした状態
実測値です。環境によって変わります。
Try CentOS Atomic Host
CentOS Atomic Host
•  CentOS をベースに Project Atomic の成果
を追加
•  標準で Docker, Kubernetes, Cockpit,
Etcd , cloud-initが入っている
•  スナップショットが利用可能
CentOS Atomic の入手先
•  http://buildlogs.centos.org/
rolling/7/isos/x86_64/	
  
•  定期的にビルドされるスナップショット
が入手可能
•  qcow2 イメージ
– KVMで使うか、変換して使う
イメージのセットアップ
•  cloud-init が動くようになっているので、
メタデータ、設定を用意
•  今回はisoで読ませる方法を解説
用意するファイル
cloud-­‐config	
  
	
  
password:	
  changeme	
  
ssh_pwauth:	
  True	
  
chpasswd:	
  {	
  expire:	
  False	
  }	
  
	
  
ssh_authorized_keys:	
  
	
  	
  -­‐	
  ssh-­‐rsa	
  ...	
  foo@foo.com	
  (insert	
  ~/.ssh/id_rsa.pub	
  here)	
  
meta-­‐data	
  
	
  
instance-­‐id:	
  iid-­‐atomic01;	
  
local-­‐hostname:	
  centos-­‐atomic;
ファイルをisoにする
$	
  genisoimage	
  -­‐output	
  init.iso	
  	
  
	
  	
  	
  -­‐volid	
  cidata	
  –joliet	
  	
  
	
  	
  	
  -­‐rock	
  user-­‐data	
  meta-­‐data
init.isoをマウントすると
起動時にcloud-initが読み込む
ちょっと面倒と思った?
Vagrant Boxを作りました
Vagrant で CentOS Atomic
$	
  vagrant	
  init	
  yuryu/centos-­‐atomic	
  
$	
  vagrant	
  up
•  公式ではありません
•  VirtualBox Additions は入っていません
•  20141129版のqcow2をもとに作成
•  id: centos, password: vagrant
注意
CentOS AtomicでKubernetes
•  標準で入っているので使ってみよう
•  Docker内にFedoraとApacheのイメージを
入れて、起動させてみる
•  Minion, pod 1つの最小構成
•  参考資料: Testing Kubernetes with an
Atomic Host http://www.projectatomic.io/blog/
2014/11/testing-­‐kubernetes-­‐with-­‐an-­‐atomic-­‐host/	
  
前準備(バグ対応)
#	
  cp	
  /usr/lib/systemd/system/kubelet.service	
  	
  
	
  	
  	
  	
  	
  /etc/systemd/system/	
  
#	
  sed	
  -­‐i	
  s/docker.socket/docker.service/	
  	
  
	
  	
  	
  	
  	
  /etc/systemd/system/kubelet.service	
  
#	
  systemctl	
  daemon-­‐reload	
  
現在のスナップショットにはバグがあって、対応が必要。
デーモン起動&確認
#	
  for	
  SERVICES	
  in	
  etcd	
  kube-­‐apiserver	
  	
  
	
  	
  kube-­‐controller-­‐manager	
  kube-­‐scheduler	
  	
  
	
  	
  docker	
  kube-­‐proxy.service	
  kubelet.service;	
  do	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  systemctl	
  restart	
  $SERVICES	
  
	
  	
  	
  	
  	
  	
  	
  	
  systemctl	
  enable	
  $SERVICES	
  
	
  	
  	
  	
  	
  	
  	
  	
  systemctl	
  status	
  $SERVICES	
  
	
  	
  	
  	
  done	
  
	
  
#	
  kubectl	
  get	
  minions	
  
NAME	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  LABELS	
  
127.0.0.1	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <none>出力:
Apacheを起動してみる
#	
  curl	
  -­‐Lo	
  apache.json	
  	
  
	
  	
  	
  	
  http://bit.ly/1ub4I0c	
  
#	
  kubectl	
  create	
  -­‐f	
  apache.json	
  
	
  
	
  
状態確認
#	
  kubectl	
  get	
  pod	
  fedoraapache	
  
	
  
出力:
NAME	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  IMAGE(S)	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  HOST	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  LABELS	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  STATUS	
  
fedoraapache	
  	
  	
  	
  	
  	
  	
  	
  fedora/apache	
  	
  	
  	
  	
  	
  	
  127.0.0.1/	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  name=fedoraapache	
  	
  	
  Running	
  
ログの確認
Masterのログ	
  
#	
  journalctl	
  -­‐f	
  -­‐l	
  -­‐xn	
  -­‐u	
  kube-­‐apiserver	
  	
  
	
  	
  	
  -­‐u	
  etcd	
  -­‐u	
  kube-­‐scheduler	
  
	
  
Minionのログ	
  
#	
  journalctl	
  -­‐f	
  -­‐l	
  -­‐xn	
  -­‐u	
  kubelet	
  	
  
	
  	
  	
  -­‐u	
  kube-­‐proxy	
  -­‐u	
  docker
動作確認と終了
動作確認
#	
  curl	
  http://localhost	
  
	
  
結果:	
  	
  
終了
#	
  kubectl	
  delete	
  pod	
  fedoraapache	
  
Apache
デモ
まとめ
•  Atomic Host = コンテナ向けOS
– Docker, Kubernetes, Etcd などを標準搭載
– 従来のOSから出発して改良
•  RHEL 7ではDockerをサポート
•  RHEL Atomic Host と CentOS Atomic
Host は別プロジェクト
•  Atomic Host は簡単に試せる
Thank you!

Docker on RHEL & Project Atomic 入門 - #Dockerjp 4