docker初心者の方が知っておいた方がよい基礎知識

TIS株式会社
戦略技術センター
森元 敏雄

Copyright © 2016 TIS Inc. All rights reserved.

今回のプレゼンテーションの目的docker未経験の方、初心者の方にdockerについてなんとなく理解して頂く 今回以下のような参加者の方もおられますが• dockerを業務で使いこなしている• dockerの周辺ツールを使って運用できる• dockerのサポートを仕事にしている

しばしご休憩下さい
Copyright © 2016 TIS Inc. All rights reserved.

2

アジェンダ1. dockerとは？
2. VMとdockerの違いとは？
3. dockerの使われ方は？
① 開発環境の事例② 情報提供サイト運用の事例③ 大規模コマースサイトの事例

4. まとめCopyright © 2016 TIS Inc. All rights reserved.

3

アジェンダ1. dockerとは？
2. VMとdockerの違いとは？
3. dockerの使われ方は？
① 開発環境の事例② 情報提供サイト運用の事例③ 大規模コマースサイトの事例

4. まとめCopyright © 2016 TIS Inc. All rights reserved.

41. dockerとは？
Docker（ドッカー[2]）はソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。Linuxカーネルにおける「libcontainer」と呼ばれるLinuxコンテナ技術[3]とaufsのような特殊なファイルシステムを利用してコンテナ型の仮想化を行う[4]。VMware製品などの完全仮想化を行うハイパーバイザー型製品と比べて、ディスク使用量は少なく、インスタンス作成やインスタンス起動は速く、性能劣化がほとんどないという利点を持つ。dockerfileと呼ばれる設定ファイルからコンテナイメージファイルを作成可能という特性を持つ。一方で、コンテナOSとしてはホストOSと同じLinuxカーネルしか動作しない。
出展[Wikipedia ] https://ja.wikipedia.org/wiki/Docker
出展[http://blog.oukasoft.com/OS/]

dockerの特長を３つ上げると① コンテナ型の超軽量サーバ仮想化製品② コンテナ内は実行環境として独立している③ コンテナはリソース消費量が少ない
dockerの概念の理解にはこちらの記事がお勧めです。

Think IT 「Dockerを理解するための8つの軸」
https://thinkit.co.jp/story/2015/07/29/5382※この記事お読みいただいたら、このプレゼンいらないかも

Copyright © 2016 TIS Inc. All rights reserved.

5

1. dockerとは？
① コンテナ型の超軽量サーバ仮想化製品
 dockerのドライバであるlibcontainerにより、Kernelの一部を分離した実行環境を作成できる
 この実行環境がコンテナであり、ベースOSと独立したファイルシステムやリソースやデバイスを利用できる コンテナはKernelやベースOSの機能を共有するため、OSの全機能を乗せる必要がない「Docker 0.9: introducing execution drivers and libcontainer」
https://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/

なにができるのかOSの内部に独立したアプリケーションの実行環境＝コンテナを生成することができるリソース消費量が非常に少なく１台に物理サーバに多くのコンテナを稼働させられる
Copyright © 2016 TIS Inc. All rights reserved.

6

1. dockerとは？
① コンテナ型の超軽量サーバ仮想化製品
 CentOS 7を実際に動かしてみた メモリ使用量
USER
root
root
root
root
root
root

PID %CPU %MEM
2257 0.0 0.02326 0.0 0.02369 0.0 0.02412 0.0 0.02456 0.0 0.0
2498 0.0 0.0

VSZ
11780
11780
11780
11780
11780
11780

RSS TTY
2924 pts/1
2984 pts/2
2812 pts/3
2820 pts/4
2808 pts/5
2808 pts/6STAT STARTSs+ 10:59
Ss+ 11:04
Ss+ 11:04
Ss+ 11:04
Ss+ 11:04
Ss+ 11:04

TIME COMMAND
0:00 /bin/bash
0:00 /bin/bash
0:00 /bin/bash
0:00 /bin/bash
0:00 /bin/bash
0:00 /bin/bash

１コンテナ当たり３MB弱で動作している
ベースOSからはbashの１プロセスに見えている ディスク使用量
12K
28K
4.0K
4.0K
4.0K
208M

348cadde08e0da06bc3a2966385cebd323a3462ccb09d3e67c25314840c2586e
348cadde08e0da06bc3a2966385cebd323a3462ccb09d3e67c25314840c2586e-init
a098168aaa9a5c70d240d7f77f1d99fef0ea31e6c8dd84eb9f61f9c1b21d259bb984ff074f4526ea4544b4d020144b86b4e59e3d980c0de202f8cc55253731f0
cbdf4f6bfe7e0d26b8d30c477663cc1aadc1fa6c37798be82910088ee6d5baed
f8b2fd51f64484885fc719fad86b0aaae7bf536d8493b4b3edf00c2620a6d7ca

ディスク使用量も210MBで動作している※Ubuntu 15.10 + docker 1.10.2, build c3959b1で検証

Copyright © 2016 TIS Inc. All rights reserved.

7

1. dockerとは？
② コンテナ内は実行環境として独立している ベースOSとコンテナ内のファイルシステムは分離されている
 コンテナ内のリソース（ネットワークやポート）もベースOSから分離されている
 コンテナ間も同様に分離されている
なにができるのかコンテナを利用することでOS内に多面の実行環境を構築することができる
環境も独立しているため、コンテナで分離していればファイルやバージョンの競合や、設定やポートの競合が回避できる
Copyright © 2016 TIS Inc. All rights reserved.

8

1. dockerとは？
② コンテナ内は実行環境として独立している
 Ubuntu15.10内でCentOS 7コンテナを実行# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=15.10# docker ps
CONTAINER ID
PORTS
edb01aa11cee
suspicious_leavitt

ベースOSはUbuntu

IMAGE
NAMES
centosCOMMAND

CREATEDSTATUS"/bin/bash"

52 minutes ago

Up 52 minutes# docker attach edb01aa11cee[root@edb01aa11cee /]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)[root@edb01aa11cee /]# df -hFilesystem
Size Used Avail Use% Mounted onnone
41G 2.2G
37G
6% /tmpfs
3.9G
0 3.9G
0% /dev
tmpfs
3.9G
0 3.9G
0% /sys/fs/cgroup/dev/dm-0
41G 2.2G 37G 6% /etc/hosts
shm
64M
064M
0% /dev/shm

Copyright © 2016 TIS Inc. All rights reserved.

コンテナの中はCentOS 7.2

コンテナ内にはCentOS 7.2のファイルシステ
ムが存在9

1. dockerとは？
③ コンテナはリソース消費量が少ない 読み取り専用のコンテナのベースイメージ上に書き込み可能領域を重ねてmountすることでファイルシステムを作成しているベースOSのファイルシステムの一部を書き込み領域として提供

書き込み
領域

docker hubなどからダウンロードしたOSイ
メージ

OS
イメージ

読み取り専用のOSイ
メージの上に、書き込み可能なファイルシステムをマウントすることでコンテナ内のファイルシステムを構成

docker
ベースOS

この方式を採用することで、ベースOSのイメージを変更せずにコンテナ独自のファイルシステムを実現
Copyright © 2016 TIS Inc. All rights reserved.

10

1. dockerとは？
③ コンテナはリソース消費量が少ない
 同一OSのコンテナを多数起動する場合、OSイメージのファイルは各コンテナで共有される
各コンテナごとに書き込み領域を提供することで独自性を確保
OSイメージは同一OSのコンテナで共有するため、システム内に１つ存在すればよい

書き込み
領域

書き込み領域

書き込み領域OS
イメージ
dockerベースOS

同一OSのコンテナを多数起動する場合、各コンテナの差分データのみがハードディスク上に保持されるため、ハードディスクの消費量が大きく削減できる
Copyright © 2016 TIS Inc. All rights reserved.

11

アジェンダ1. dockerとは？
2. VMとdockerの違いとは？
3. dockerの使われ方は？
① 開発環境の事例② 情報提供サイト運用の事例③ 大規模コマースサイトの事例

4. まとめCopyright © 2016 TIS Inc. All rights reserved.

12

２．VMとdockerの違いとは？
① VMware/KVM/Xenのサーバ仮想化
 物理マシンのハードウェアやネットワークスイッチなどハードウェアを完全にエミュレーションできる環境
物理マシンと同等機能の仮想ハードウェ
アを提供

出典:vmware BLOGS
https://blogs.vmware.com/jpcim/2014/10/vsphere_kiso07.ht
ml

基本的に物理マシンにできることは仮想マシンでもできる
Copyright © 2016 TIS Inc. All rights reserved.

13

２．VMとdockerの違いとは？
② Dockerのコンテナのサーバ仮想化
 アクセスが制限されたファイルシステムをマウントしたプロセス内で独立した実行環境を構築

出典:Research at
http://research.worksap.com/research/docker-20140724-2/

ベースOSと完全に分離してないため、セキュリティー上の制約が存在する。さらにハードウェアやKernelに影響するプロダクトは利用できない場合がある
Copyright © 2016 TIS Inc. All rights reserved.

14

２．VMとdockerの違いとは？

できないことの一例
 fdiskコマンドやSoftware iSCSIやDRBDなどディスクデバイスに対して操作が発生する製品
 dockerコンテナ内からでは/dev/sdxなどのデバイスを参照することも操作することもできない systemctlなどのサービスを制御するコマンド
 RHEL 7.x系ではサービスの起動、停止を行う
systemcltコマンドがコンテナ内では使用できない

 rebootなどのサーバを再起動するコマンド
 systemctl不可を再起動で回避することもできない
docker環境ではハードウェアはベースOS上で管理し、コンテナ内で利用するサービスはコンテナ生成時にdockerfile等でインストールを行うのが通常手段である
Copyright © 2016 TIS Inc. All rights reserved.

15

アジェンダ1. dockerとは？
2. VMとdockerの違いとは？
3. dockerの使われ方は？
① 開発環境の事例② 情報提供サイト運用の事例③ 大規模コマースサイトの事例

4. まとめCopyright © 2016 TIS Inc. All rights reserved.

16

３．dockerの使われ方は？
① 開発環境の事例
 パッケージ製品の保守開発環境への利用事例

 導入前の問題• 多数のパッケージ製品の開発検証環境が必要• １つのパッケージ製品に対しても新旧バージョンの保守・開発環境が必要• 国内・海外の開発拠点の環境の共通化が必要
 導入後の効果• 各製品の各バージョンの検証環境が統一され、製品の品質が安定• 開発環境維持コストを低減できる• 使用するリソース量が削減でき、開発者個々に自由な開発環境を提供
Copyright © 2016 TIS Inc. All rights reserved.

17

３．dockerの使われ方は？
① 開発環境の事例

引用：株式会社ワークスアプリケーションズ 遠藤博樹氏の講演資料(http://www.slideshare.net/endhrk/docker-use-case36473690)

Copyright © 2016 TIS Inc. All rights reserved.

18

３．dockerの使われ方は？
② 情報提供サイト運用の事例
 情報提供サイトの更新処理の自動化への利用事例

 導入の為に実施した対策• Webサイトのアプリケーションを更新する単位でコンテナ化• システムの更新はコンテナの入れ替えで実施• コンテナの変更は上位のnginxの設定変更で対応
 導入後の効果• アプリケーションの更新および設定変更の自動化を実現
 今後の課題• コンテナ配置のワークロードの自動化• コンテナ増減によるオートスケールの実現
Copyright © 2016 TIS Inc. All rights reserved.

19

３．dockerの使われ方は？
② 情報提供サイト運用の事例
呼び出すコンテナの切り替えは上位のnginxの設定変更で対応
アプリケーションの更新はコンテナを入れ替える形で実施

引用：クックパッド株式会社
開発者ブログ(http://techlife.cookpad.com/entry/2015/04/20/134758))
Copyright © 2016 TIS Inc. All rights reserved.

20

３．dockerの使われ方は？
③ 大規模コマースサイトの事例
 10万テナントの大規模コマースサイトの運用

引用：Shopify Inc 技術ブログ(https://engineering.shopify.com/17489060-docker-at-shopify-how-we-built-containersthat-power-over-100-000-online-shops)
Copyright © 2016 TIS Inc. All rights reserved.

21

３．dockerの使われ方は？
③ 大規模コマースサイトの事例
 導入方法• コンテナ内部から不要な機能を除き、最小化• コンテナの構築をDockerfileで自動化• アプリケーションをDockerコンテナで動作させることを前提とする Containerizingを行った• アプリケーションを１つのコンテナに集約した 導入後の効果• 利用申し込みからテナントへのサービスの提供の自動化を実現• サービス提供までの時間を実現• リソース使用量の低減にも成功• 現在は20万件以上のテナントにサービスを提供
Copyright © 2016 TIS Inc. All rights reserved.

22

4.まとめ dockerはOS内に独立した実行環境を構築できる
 実行環境をカプセル化できる製品

 コンテナはリソース消費量が少ないので、より多くの実行環境を同時に提供できる
 同じものを繰り返し構築することに適している 仕様上できないことが結構多い アプリ・インフラ両面から解決が必要 将来、エンタープライズでの利用が普通になる dockerの開発も周辺ツールも開発もPaaS利用を前提としている
 実現にはフルスタックエンジニアの参画が不可欠
Copyright © 2016 TIS Inc. All rights reserved.

23