Submit Search
Upload
Dockerの仕組みとIIJ社内での利用例
•
91 likes
•
18,059 views
M
maebashi
Follow
第2回エンタープライズ向けのオープンソース勉強会 - 『コンテナ仮想化「Docker」技術勉強会』
Read less
Read more
Technology
Report
Share
Report
Share
1 of 37
Download now
Download to read offline
Recommended
そろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホン
Naoki Nagazumi
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Masahito Zembutsu
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
mookjp
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
Masahito Zembutsu
Dockerクイックツアー
Dockerクイックツアー
Etsuji Nakai
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Masahito Zembutsu
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
オトナのDocker入門
オトナのDocker入門
Tsukasa Kato
Recommended
そろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホン
Naoki Nagazumi
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Masahito Zembutsu
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
mookjp
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
Masahito Zembutsu
Dockerクイックツアー
Dockerクイックツアー
Etsuji Nakai
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Masahito Zembutsu
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
オトナのDocker入門
オトナのDocker入門
Tsukasa Kato
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
VirtualTech Japan Inc.
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
Docker超入門
Docker超入門
VirtualTech Japan Inc.
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Yuichi Ito
Dockerの利用事例
Dockerの利用事例
maebashi
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
Masahito Zembutsu
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
Masahito Zembutsu
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
zaru sakuraba
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
Ryo Nakamaru
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
Masahito Zembutsu
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
Masahito Zembutsu
Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?
Masahito Zembutsu
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Masahito Zembutsu
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Masahito Zembutsu
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
Masahito Zembutsu
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門
KokiMakita1
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
Takashi Makino
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
More Related Content
What's hot
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
VirtualTech Japan Inc.
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
Docker超入門
Docker超入門
VirtualTech Japan Inc.
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Yuichi Ito
Dockerの利用事例
Dockerの利用事例
maebashi
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
Masahito Zembutsu
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Kunihiro TANAKA
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
Masahito Zembutsu
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
zaru sakuraba
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
Ryo Nakamaru
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
Masahito Zembutsu
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
Masahito Zembutsu
Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?
Masahito Zembutsu
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Masahito Zembutsu
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Masahito Zembutsu
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
Masahito Zembutsu
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門
KokiMakita1
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
What's hot
(20)
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Docker超入門
Docker超入門
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Dockerの利用事例
Dockerの利用事例
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
Docker技術情報アップデート 2015年7月号
Docker技術情報アップデート 2015年7月号
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
Docker 17.06 Updates 最近何が変わったの?
Docker 17.06 Updates 最近何が変わったの?
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Docker技術情報アップデート v1.9 ネットワークとオーケストレーション
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
Docker Compose 徹底解説
Docker Compose 徹底解説
CAMPHOR- day 2020 - Docker 超入門
CAMPHOR- day 2020 - Docker 超入門
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Similar to Dockerの仕組みとIIJ社内での利用例
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
Takashi Makino
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Masahiro Nagano
Docker実践入門
Docker実践入門
hiro nemu
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
Masahito Zembutsu
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
Akira Yoshiyama
Building production server on docker
Building production server on docker
Hiroshi Miura
Building production server on docker
Building production server on docker
Hiroshi Miura
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
Emma Haruka Iwao
Dockerを支える技術
Dockerを支える技術
Etsuji Nakai
20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会
samemoon
はじめてのDockerパーフェクトガイド(2017年版)
はじめてのDockerパーフェクトガイド(2017年版)
Hiroshi Hayakawa
ビルドサーバで使うDocker
ビルドサーバで使うDocker
Masashi Shinbara
Docker handson
Docker handson
koda3
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
Etsuji Nakai
Dockerハンズオン
Dockerハンズオン
Kazuyuki Mori
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
Taisuke Yamada
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
Masahito Zembutsu
Docker & Kubernetes基礎
Docker & Kubernetes基礎
Daisuke Hiraoka
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker
74th
OpenNebula on Ubuntu
OpenNebula on Ubuntu
autumnalsky
Similar to Dockerの仕組みとIIJ社内での利用例
(20)
Dockerでらくらく開発・運用を体感しよう
Dockerでらくらく開発・運用を体感しよう
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Docker実践入門
Docker実践入門
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
Building production server on docker
Building production server on docker
Building production server on docker
Building production server on docker
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
Dockerを支える技術
Dockerを支える技術
20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会
はじめてのDockerパーフェクトガイド(2017年版)
はじめてのDockerパーフェクトガイド(2017年版)
ビルドサーバで使うDocker
ビルドサーバで使うDocker
Docker handson
Docker handson
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
Dockerハンズオン
Dockerハンズオン
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
Docker & Kubernetes基礎
Docker & Kubernetes基礎
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker
OpenNebula on Ubuntu
OpenNebula on Ubuntu
Dockerの仕組みとIIJ社内での利用例
1.
Dockerの仕組みとIIJ社内での利用例 maebashi @
IIJ © 2014 Internet Initiative Japan Inc.
2.
© 2014 Internet Initiative
Japan Inc. 2 本日の話 • Dockerのコンテナ起動の仕組みについて (概略のみ) • IIJ社内での利用例 特に断りがない限り、本資料の説明は CentOS 6.6 + docker 1.3.2を前提としている この資料のURL: http://www.slideshare.net/maebashi/dockeriij
3.
© 2014 Internet Initiative
Japan Inc. 3 Docker とは? • Docker Engine + Docker Hub のプラッ トフォーム – Docker Engine – コンテナ管理ソフトウェア – Docker Hub – Dockerのイメージを共有するため のクラウドサービス
4.
© 2014 Internet Initiative
Japan Inc. 4 コンテナとは何か? • Linux標準機能を複数組み合わせて実 現する隔離されたプロセス Namespaces ネットワーク環境やファイルシステ ム等の分離 Cgroups メモリやCPUなどのリソース制限 Capabilities 権限降格 iptables ネットワークパケットフィルタ and NAT
5.
© 2014 Internet Initiative
Japan Inc. 5 docker run • 指定イメージを元に新しいコンテナを 作ってコマンドを実行する # docker run centos:centos6 echo Hello, world Hello, world # イメージ名 (リポジトリ名:タグ名) コマンドと引数
6.
container © 2014 Internet
Initiative Japan Inc. 6 Docker client と daemon Host Docker daemon docker pull docker run docker ... container container Docker client HTTP Unix domain socket または TCP Docker Hub pull push
7.
© 2014 Internet Initiative
Japan Inc. 7 Dockerの実装 • Go言語で記述 – ごく一部 C言語で記述 (libcontainerの一部) • client と daemon は同一バイナリ – 起動時オプションで動作を切り替える – 実行バイナリとしては docker 本体と、もうひとつ dockerinit がある • execdriver, graphdriverを選べる
8.
© 2014 Internet Initiative
Japan Inc. 8 execdriver, graphdriver • execdriver – コンテナを実行するドライバ • lxc – lxc-* コマンド群を利用 • native – libcontainer を利用 • graphdriver – ディスクイメージ管理 • aufs • btrfs • devmapper • vfs この資料では execdriver = native、graphdriver = devmapper を前提とする
9.
# docker run
centos:centos6 echo Hello, world Docker Hub run © 2014 Internet Initiative Japan Inc. 9 コンテナ起動の流れ image snapshot process snapshot create start 動いている コンテナ 止まっている コンテナ pull (ひな形)
10.
Docker Hub run
© 2014 Internet Initiative Japan Inc. 10 コンテナ起動の流れ image snapshot process snapshot create start 動いている コンテナ 止まっている コンテナ pull (ひな形)
11.
CentOS 6 の場合
/var/lib/docker/devicemapper/devicemapper/ # cd /var/lib/docker/devicemapper/devicemapper/ # ls -lh total 550M -rw-------. 1 root root 100G Nov 4 14:59 data -rw-------. 1 root root 2.0G Nov 4 14:59 metadata # © 2014 Internet Initiative Japan Inc. 11 イメージの格納場所 • 上記dataファイルがブロックプール – data(とmetadata)の中に複数のイメージを格納 – devicemapper(dm)により論理デバイスとして使え る – dmで論理デバイスのスナップショットを作れる
12.
© 2014 Internet Initiative
Japan Inc. 12 dockerのイメージ管理 • 階層化され、子は親との差分を管理 • 各イメージはそれをbuildしたコンテナの 情報を持つ docker images --viz! でGraphviz用dotファイルを 出力
13.
/var/lib/docker/devicemapper/metadata/<ID> © 2014 Internet
Initiative Japan Inc. 13 管理情報 • dockerのイメージIDとdevicemapperの 論理デバイスとの対応 • 各イメージの親子関係、作成時刻、build コンテナの情報等 /var/lib/docker/graph/<ID>/json
14.
Docker Hub run
© 2014 Internet Initiative Japan Inc. 14 コンテナ起動の流れ image snapshot process snapshot create start 動いている コンテナ 止まっている コンテナ pull (ひな形)
15.
# docker create
centos:centos6 echo Hello, world 13fd39df5f742cd90ce703852af274c98c00c7c559d236..... /var/lib/docker/containers/<ID>/config.json © 2014 Internet Initiative Japan Inc. 15 docker create • config生成 hostconfig.json • 指定イメージからコンテナ用ファイルシス テム作成 – イメージから<ID>-initというsnapshotを作成 – SetupInitLayer – <ID>-initから<ID>というsnapshotを作成
16.
Docker Hub run
© 2014 Internet Initiative Japan Inc. 16 コンテナ起動の流れ image snapshot process snapshot create start 動いている コンテナ 止まっている コンテナ pull (ひな形)
17.
# docker start
–a 13fd39df5f74 13fd39df5f74 Hello, World © 2014 Internet Initiative Japan Inc. 17 docker start • 設定ファイル生成 – resolv.conf, hosts など • コンテナ用ファイルシステムを一旦ホスト側の 以下のディレクトリにマウント – /var/lib/docker/devicemapper/mnt/<ID> • 新規 Namespace で、外部コマンド dockerinit プロセスを起動 (つづく)
18.
© 2014 Internet Initiative
Japan Inc. 18 Namespace • コンテナ実現のための中核となる機能 • プロセスが動作する空間を分離する – いくつかの種類がある • Network Namespace – ネットワーク環境の分離 • Mount Namespace – ファイルシステムの分離 • PID Namespace – プロセステーブルの分離 • UTS Namespace – hostnameの分離 • IPC Namespace – IPCの分離 • User Namespace – UID/GIDの分離(docker 1.3 では未使用)
19.
/var/lib/docker/init/dockerinit-1.3.2 native –console
”” –pipe 3 –root /var/lib/docker/ execdriver/native/<ID> -- echo Hello, world © 2014 Internet Initiative Japan Inc. 19 dockerinit プロセス起動 • 起動コマンド – コマンドライン引数例 – 親プロセス: docker daemon、子: dockerinit • 外部コマンド(dockerinit)を起動する → cloneシステムコールの呼び出し
20.
daemon/execdriver/native/driver.go c.ProcessConfig.SysProcAttr =
&syscall.SysProcAttr{ namespaces.GetNamespaceFlags(container.Namespaces)), © 2014 Internet Initiative Japan Inc. 20 clone で新規Namespace • docker daemonがdockerinitコマンドを 起動する時のcloneのフラグを指定 Cloneflags: uintptr( CLONE_NEWNS! CLONE_NEWUTS! CLONE_NEWIPC! CLONE_NEWPID! CLONE_NEWNET! } これらの OR をとったものをフラグとして指定 (詳細は man 2 clone 参照)
21.
© 2014 Internet Initiative
Japan Inc. 21 dockerinit 起動後 • 親(docker daemon) – 子プロセスのPIDを元にcgroup設定 – ネットワーク設定 • 子(dockerinit) – 子のPID Namespaceの中で PID=1で起動 – ネットワーク設定 – ファイルシステム関連設定(rootfsをマウント) – 本来コンテナ内で実行するコマンドを execv
22.
コンテナ2 Network Namespace
コンテナ3 Network Namespace © 2014 Internet Initiative Japan Inc. 22 コンテナのネットワーク • コンテナ毎にNetwork Namespaceを分離 – 分離しないこともできる(ホストと共有) コンテナ1 Network Namespace eth0 eth0 eth0 vethXX vethYY vethZZ docker0(仮想ブリッジ) NIC IPマスカレード ホスト ネットワーク Network Namespace veth (仮想NICのペア)
23.
© 2014 Internet Initiative
Japan Inc. 23 コンテナのファイルシステム • Mount Namespaceでコンテナ毎に分離 docker create /.../mnt/<ID>/! lost+found/! rootfs/! bin/! etc/! home/! ...! ホスト Mount Namespace ホスト コンテナ Mount Namespace コンテナ起動毎に スナップショットを作成 ホストLinuxの /var/lib/docker/devicemapper/mnt/<ID>/! にマウント コンテナの新規Mount Namespace内 で、その root に rootfs/ 以下をマウント /! bin/! etc/! home/! ...! mount mount image snapshot docker start コンテナ
24.
© 2014 Internet Initiative
Japan Inc. 24 cgroups • プロセスグループのリソース(CPU、メモ リ、ディスクI/Oなど)の利用を制限 – dockerではcpu(set), memoryについて制 限可 – デバイスへのアクセスも制限 • リソース使用状況の統計値がとれる
25.
© 2014 Internet Initiative
Japan Inc. 25 おまけ: docker exec • 指定コンテナの中でコマンドを実行 – つまり、指定コンテナ(プロセス)と同じ Namespaceでコマンドを実行 • 既存Namespaceに切り替えるには setnsシステムコールを使う – Goのプロセスモデルとあまり相性が良くな い – main()に到達する前にCで書かれたinit()で なんとかしているっぽい
26.
© 2014 Internet Initiative
Japan Inc. 26 ここまでのまとめ • dockerのコンテナはLinux標準機能の Namespaces, cgroups等を使用して実 現
27.
IIJ社内での利用例 継続的インテグレーション クラスタリング
モニタリング © 2014 Internet Initiative Japan Inc.
28.
© 2014 Internet Initiative
Japan Inc. 28 継続的インテグレーション(CI) • drone – オープンソースの CI サーバ – dockerコンテナ内のクリーンな環境でビルド、テスト を実行する – GitHub/GitHub Enterprise/GitLab等と連携
29.
結果 © 2014 Internet
Initiative Japan Inc. 29 継続的インテグレーション: 流れ push drone 開発者 build" test" notify" deploy clone rpm serf event 社内IRC 社内yumリポジトリ docker" container
30.
© 2014 Internet Initiative
Japan Inc. 30 コンテナのクラスタリング • 多数のDockerホスト上の多数のコンテ ナを管理したい Docker Daemon Docker Daemon Docker Daemon 空き Container Container Container Container Container Container Container Container クラスタ1 クラスタ2 クラスタ3 Host
31.
© 2014 Internet Initiative
Japan Inc. 31 クラスタ管理ツール • fig – 開発環境用、ホスト1台のみ対象 • Apache Mesos – 複数ホストのリソース管理 • Kubernetes – Google Container Engineで使われている • flynn, dokku – PaaS用
32.
request/response master © 2014
Internet Initiative Japan Inc. 32 IIJ内製 docker manager 構成図 slave Docker Daemon Container Container Container 構成情報DB CLI, Web UI など Docker Remote API API dockerホスト群 使用可能ホスト リソース空き情報 IPアドレス空き情報 etc
33.
© 2014 Internet Initiative
Japan Inc. 33 dockerコンテナのモニタリング • 個々のコンテナのメトリクスを収集したいがコ ンテナ毎にsnmpdやその他エージェントを 入れたくない • dockerコンテナのメトリクス収集 – http://blog.docker.com/2013/10/gathering-lxc-docker-containers-metrics/ – cgroupsの統計情報を使うことにより、ホスト 上で(コンテナの外から)メトリクスを収集可能 – コンテナのNetwork Namespaceに切り替え て /proc/net/devを参照することでネットワーク の統計情報を得られる
34.
© 2014 Internet Initiative
Japan Inc. 34 docker-metricsd • 各dockerホストに常駐、dockerコンテナの情 報(cgroupsの統計情報等)を収集して返す – 似たようなもの: Google cAdvisor等 • githubで公開中 – https://github.com/maebashi/docker-metricsd • Docker Hubでも公開中 – インストール & 実行 # docker run -v /usr/local/bin:/target maebashi/docker-metricsd # /usr/local/bin/docker-metricsd &
35.
© 2014 Internet Initiative
Japan Inc. 35 docker-metricsdはメトリクスをJSON形式で返す "memory": { "failcnt": 0, "stats": { "unevictable": 0, "total_unevictable": 0, "total_swap": 0, "total_rss": 380928, "total_pgpgout": 681084, "total_pgpgin": 697086, "total_mapped_file": 1433600, "total_inactive_file": 38936576, "mapped_file": 1433600, "inactive_file": 38936576, "inactive_anon": 0, "hierarchical_memsw_limit": 9223372036854776000, "hierarchical_memory_limit": 9223372036854776000, "cache": 102838272, "active_file": 63901696, "active_anon": 380928, "pgpgin": 697086, "pgpgout": 681084, "rss": 380928, "swap": 0, "total_active_anon": 380928, "total_active_file": 63901696, "total_cache": 102838272, "total_inactive_anon": 0 }, "max_usage": 139268096, "usage": 104189952 }, "interfaces": { "outpackets.0": 3021223, "inbytes.0": 8228044607, "indrop.0": 0, "inerrs.0": 0, "inpackets.0": 6429687, "name.0": "eth0", "outbytes.0": 199687042, "outdrop.0": 0, "outerrs.0": 0 }, "cpuacct": { "throlling_data": {}, "cpu_usage": { "usage_in_usermode": 2.668e+10, "usage_in_kernelmode": 8.181e+10, "percpu_usage": [ 22599918565, 987624379, 65146098, 36705600, 18221767943, 5890326, 22768005795, 4033968, 218211598, 4302652, 5437296326, 23781278563, 18992360915, 18712487134, 55742891, 18522722054 ] } }
36.
© 2014 Internet Initiative
Japan Inc. 36 定期的にメトリクスを収集して Grafanaでグラフ化 dockerホスト群 docker-metricsd ccoonntatainineer r container メトリクス収集 ツール(内製) InfluxDB Docker Daemon
37.
© 2014 Internet Initiative
Japan Inc. 37 結果 ↓CPU Accounting Memory→ ↓Network traffic
Download now