Upload
masahito-zembutsu
View
1.267
Download
0
Embed Size (px)
Citation preview
1
Docker Volume 基礎
Project Longhorn 紹介
Engineer / Technology Evangelist, SAKURA Internet, Inc.@zembutsu 前佛 雅人 ZEMBUTSU Masahito
2017年6月28日(水) Rancher Meetup Tokyo #8
2
もしも Rancher-NFS がなかったら?
3
分散環境でボリューム管理
ボリューム?
4
Docker Volume
5
データの扱い
コンテナA専用ファイル階層File System
…
//bin
/etc
/var
コンテナB専用ファイル階層File System
…
//bin
/etc
/var
6
データの扱い
コンテナA専用ファイル階層File System
…
//bin
/etc
/var
コンテナB専用ファイル階層File System
…
//bin
/etc
/var
hello.txt×
7
データの扱い
コンテナA専用ファイル階層File System
…
//bin
/etc
/var
コンテナB専用ファイル階層File System
…
//bin
/etc
/var
hello.txt×
HOST Root
File System/var/lib/docker/overlay/
hello.txt
ディレクトリはストレージドライバによって異なる
A
BUFS ( Union File System )
8
Docker Volume
9
データ・ボリューム
コンテナA専用ファイル階層File System
…
//bin
/etc
/var
コンテナからはUFSを通してデータ領域が見えるストレージ・ドライバのオーバヘッドを受けない
複数のコンテナでボリュームを共有できる
volume
/data
/
ボリュームVolume
/var/lib/docker/volumes/HOST Root
File System
10
コンテナファイル階層File System
/
UFS ( Union File System)
…
//bin
/var
DockerイメージDocker Image
/var/lib/docker/image/
volume
/
ボリュームVolume
/data
コンテナ用イメージ層Container’s
Image Layer
/
/var/lib/docker/volumes//var/lib/docker/containers/
ReadOnly
11
ボリュームは3分類
ホストをマウント 名前付き
ホスト上のディレクトリ
/docker/data
/data
名前無し
volume
ボリュームの実体は、ホスト上のディレクトリ/var/lib/docker/volumes
ボリュームはコンテナ間でデータを共有できる
volume
/data /data /etc
しかし分散環境では?
13
volume volume volume
分散環境においてボリュームを共有する手段をDocker Engine は提供しない(swarm modeでさえ)
14
swarm mode ≠ Docker Swarm
192.168.10.1 192.168.10.11 192.168.10.12
public IP address public IP address public IP addresseth0
eth1
docker swarm init ¥
--advertise-addr=eth0 ¥
--data-path-addr=192.168.10.1
docker swarm join ¥
--token <TOKEN> ¥
<public_IP>:2377
Manager Workerfirewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --reload
15
docker service create -p 80:80 ¥
--replicas 2 ¥
--name=web ¥
--constraint 'node.role != manager' ¥
zembutsu/docker-sample-nginx
16
NFS
Server nfsclient
nfsclient
CentOS 7.3 (NFSv4 TCP)
192.168.10.1 192.168.10.11 192.168.10.12eth1
yum install rpcbind nfs-utils # for NFS Server
systemctl enable nfs-server
systemctl start nfs
mkdir /volumes; chown nfsnobody.nfsnobody /volumes
echo ‘/volumes 192.168.10.0/24(rw,async) 127.0.0.1(rw)’ >> /etc/exports
exportfs -a
yum install nfs-utils # for NFS clients
mkdir /sharevolume
echo ‘192.168.10.1:/volumes /sharevolume nfs defaults 0 0’ >> /etc/fstab
mount /sharevolume
17
volume volume
NFS
Server nfsclient
nfsclient
docker service create -p 80:80 ¥
--replicas 2 ¥
--name=web ¥
--constraint 'node.role != manager' ¥
--mount type=bind,source=/volumes/docroot/,destination=/usr/share/nginx/html/,bind-propagation=shared ¥
zembutsu/docker-sample-nginx
19
• スケールする環境では、コンテナだけでなく、分散ブロック・ストレージ・システムも管理が複雑化簡単にしたい
• ストレージ・コントローラとデータ(ボリューム)を分離
• 2017年4月発表・目下開発中・オープンソースhttps://github.com/rancher/longhorn
20
• ローカルディスク、ネットワークストレージ機能• コンテナと仮想マシン用のブロック・ストレージ・ボリュームを
作成• ボリュームごとに専用のストレージ・コントローラを作成• ストレージ・コントローラのレプリカを作成• ボリューム毎に複数のフロントエンドを割り当て(iSCSI ター
ゲット)• スナップショットの作成と定期的なバックアップ処理
21Introducing Project Longhorn - April 2016 Rancher Online Meetuphttps://www.slideshare.net/ShannonWilliams14/introducing-project-longhorn-april-2016-rancher-online-meetup
22
23
• 現時点では Ubuntu Server 16.04 をサポート
$ sudo apt-get update
$ sudo apt-get install open-iscsi
$ git clone https://github.com/rancher/longhorn
$ cd longhorn/deploy
$ sudo ./longhorn-setup-single-node-env.sh
(ry
1ec968b7fb266c10ee4692ec0ae1321de73c7b87f5c4822c3874148c13925265
longhorn-ui is ready
Longhorn is up at port 8080
demo
25
まとめ
27
ボリュームを通してコンテナはデータを共有する
ホストをマウント 名前付き
ホスト上のディレクトリ
/docker/data
/data
名前無し
volume
ボリュームの実体は、ホスト上のディレクトリ/var/lib/docker/volumes
ボリュームはコンテナ間でデータを共有できる
volume
/data /data /etc
何か気になる所がありますか?
ご参考:Docker 日本語ドキュメント
http://docs.docker.jp/
http://slideshare.net/zembutsu
twitter: @zembutsu