28
1 Docker Volume 基礎 Project Longhorn 紹介 Engineer / Technology Evangelist, SAKURA Internet, Inc. @ zembutsu 前佛 雅人 ZEMBUTSU Masahito 2017 6 28 ( ) Rancher Meetup Tokyo #8

Docker volume基礎/Project Longhorn紹介

Embed Size (px)

Citation preview

Page 1: Docker volume基礎/Project Longhorn紹介

1

Docker Volume 基礎

Project Longhorn 紹介

Engineer / Technology Evangelist, SAKURA Internet, Inc.@zembutsu 前佛 雅人 ZEMBUTSU Masahito

2017年6月28日(水) Rancher Meetup Tokyo #8

Page 2: Docker volume基礎/Project Longhorn紹介

2

もしも Rancher-NFS がなかったら?

Page 3: Docker volume基礎/Project Longhorn紹介

3

分散環境でボリューム管理

ボリューム?

Page 4: Docker volume基礎/Project Longhorn紹介

4

Docker Volume

Page 5: Docker volume基礎/Project Longhorn紹介

5

データの扱い

コンテナA専用ファイル階層File System

//bin

/etc

/var

コンテナB専用ファイル階層File System

//bin

/etc

/var

Page 6: Docker volume基礎/Project Longhorn紹介

6

データの扱い

コンテナA専用ファイル階層File System

//bin

/etc

/var

コンテナB専用ファイル階層File System

//bin

/etc

/var

hello.txt×

Page 7: Docker volume基礎/Project Longhorn紹介

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 )

Page 8: Docker volume基礎/Project Longhorn紹介

8

Docker Volume

Page 9: Docker volume基礎/Project Longhorn紹介

9

データ・ボリューム

コンテナA専用ファイル階層File System

//bin

/etc

/var

コンテナからはUFSを通してデータ領域が見えるストレージ・ドライバのオーバヘッドを受けない

複数のコンテナでボリュームを共有できる

volume

/data

/

ボリュームVolume

/var/lib/docker/volumes/HOST Root

File System

Page 10: Docker volume基礎/Project Longhorn紹介

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

Page 11: Docker volume基礎/Project Longhorn紹介

11

ボリュームは3分類

ホストをマウント 名前付き

ホスト上のディレクトリ

/docker/data

/data

名前無し

volume

ボリュームの実体は、ホスト上のディレクトリ/var/lib/docker/volumes

ボリュームはコンテナ間でデータを共有できる

volume

/data /data /etc

Page 12: Docker volume基礎/Project Longhorn紹介

しかし分散環境では?

Page 13: Docker volume基礎/Project Longhorn紹介

13

volume volume volume

分散環境においてボリュームを共有する手段をDocker Engine は提供しない(swarm modeでさえ)

Page 14: Docker volume基礎/Project Longhorn紹介

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

Page 15: Docker volume基礎/Project Longhorn紹介

15

docker service create -p 80:80 ¥

--replicas 2 ¥

--name=web ¥

--constraint 'node.role != manager' ¥

zembutsu/docker-sample-nginx

Page 16: Docker volume基礎/Project Longhorn紹介

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

Page 17: Docker volume基礎/Project Longhorn紹介

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

Page 18: Docker volume基礎/Project Longhorn紹介
Page 19: Docker volume基礎/Project Longhorn紹介

19

• スケールする環境では、コンテナだけでなく、分散ブロック・ストレージ・システムも管理が複雑化簡単にしたい

• ストレージ・コントローラとデータ(ボリューム)を分離

• 2017年4月発表・目下開発中・オープンソースhttps://github.com/rancher/longhorn

Page 20: Docker volume基礎/Project Longhorn紹介

20

• ローカルディスク、ネットワークストレージ機能• コンテナと仮想マシン用のブロック・ストレージ・ボリュームを

作成• ボリュームごとに専用のストレージ・コントローラを作成• ストレージ・コントローラのレプリカを作成• ボリューム毎に複数のフロントエンドを割り当て(iSCSI ター

ゲット)• スナップショットの作成と定期的なバックアップ処理

Page 21: Docker volume基礎/Project Longhorn紹介

21Introducing Project Longhorn - April 2016 Rancher Online Meetuphttps://www.slideshare.net/ShannonWilliams14/introducing-project-longhorn-april-2016-rancher-online-meetup

Page 22: Docker volume基礎/Project Longhorn紹介

22

Page 23: Docker volume基礎/Project Longhorn紹介

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

Page 24: Docker volume基礎/Project Longhorn紹介

demo

Page 25: Docker volume基礎/Project Longhorn紹介

25

Page 26: Docker volume基礎/Project Longhorn紹介

まとめ

Page 27: Docker volume基礎/Project Longhorn紹介

27

ボリュームを通してコンテナはデータを共有する

ホストをマウント 名前付き

ホスト上のディレクトリ

/docker/data

/data

名前無し

volume

ボリュームの実体は、ホスト上のディレクトリ/var/lib/docker/volumes

ボリュームはコンテナ間でデータを共有できる

volume

/data /data /etc

Page 28: Docker volume基礎/Project Longhorn紹介

何か気になる所がありますか?

ご参考:Docker 日本語ドキュメント

http://docs.docker.jp/

http://slideshare.net/zembutsu

twitter: @zembutsu