docker workshop - thaiopenstack · docker swarm...

196
Docker Workshop Chanwit Kaewkasi, Docker Captain & Swarm Maintainer

Upload: others

Post on 19-May-2020

17 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker WorkshopChanwit Kaewkasi,

Docker Captain & Swarm Maintainer

Page 2: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

As a Docker Swarm Maintainer● Contributed to the project in December 2014● Promoted to be a Maintainer in August 2015

2

Page 3: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Swarm● พัฒนาระบบจัดการคลัสเตอรสําหรับ Docker● Scale ไดถึงระดับ 1,000 โหนด

Docker Swarm10+ Million Installations

3

Page 4: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

As a Docker Captain● กลุมของผูเชี่ยวชาญดาน Docker จํานวน 46 คน แตงตั้งโดย Docker inc.● https://docker.com/captains

4

Page 5: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Project Swarm2K● Swarm คลัสเตอรที่ใหญที่สุดในโลก ขนาด 2,300 + node● สรางขึ้นจากความชวยเหลือของสมาชิกใน Docker community จากทั่วโลก

5

Page 6: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Workshop Agenda● Container concept reviews

● Docker for Developer

● Intermediate Concepts

● Advanced Concepts

6

Page 7: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Workshop Outcome● Docker Concepts

● Docker Basics

● สราง / จัดการ Docker Cluster

● Docker Networking

● Multi-Cloud Cluster

7

Page 8: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

What’s new in Docker 1.10 ?● มี DNS ฝงใน libnetwork ใชแทน

/etc/hosts

● สนับสนุน --ip สําหรับระบุให container มี fixed IP ของตัวเอง○ เชน ใชสราง Data Plane ที่ตองระบุ IP

8

Page 9: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

What’s new in Docker 1.11 ?● ใช runC เปน Runtime

○ สนับสนุน OCI standard○ Runtime Portability

● DNS round-robin○ ถา containers ใช alias เดียวกัน

9

Page 10: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

What’s new in Docker 1.12 ?● Swarm mode● Distributed Discovery model● Routing Mesh load-balancer

10

Page 11: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

แนะนํา Docker

11

Page 12: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

คอนเทนเนอร ในตลาดนัด

12

Page 13: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

13

Page 14: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

14

Software Container ?

Page 15: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

15

Software Container ?● Solaris Zones

● LXC - Linux Containers

● Docker ทําให Container ใชงายขึ้น (Commodity)

Page 16: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Container และ Docker

16

Page 17: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

17

Page 18: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

18

Page 19: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

19

Tool that makes Container Commodity● Commodity ยังไง?

● Build - การสราง / ทําลาย Container ทําไดงายขึ้นมาก● Ship - การยาย Container ทําไดงาย เพราะใช Union File System เขามาชวย

○ AUFS

○ DeviceMapper Thin Provision

○ BTRFS

○ Overlay File System

● Run - การสั่งรัน Container สะดวก○ $ docker run nginx

Page 20: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Containers เทียบกับ Virtual Machines

20

Page 21: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Container ใชรวมกับ VM เปนรูปแบบปกติ

21

Page 22: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

libcontainer - Overhead ตํ่า

22

Page 23: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

สนับสนุน Software Defined Network ระดับ Application

23

Page 24: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

รูปแบบการ Deployment ระบบป 2000 เทียบป 2016

ป 2000 ป 2016

Deploy ไมบอย1 เดือนครั้ง, 3 เดือนครั้ง

Deploy วันละ 2 ครั้ง

Monolithic

(ภาษาเดียว เฟรมเวิรคเดียว)

Microservices

(หลายภาษา หลายเฟรมเวิรค,

เกาะกันหลวม ๆ)

Scaled Up

(เครื่องใหญ เครื่องเดียว)

Scaled Out

(หลายเครื่อง ขามคลาวด เชา/ผสม)

24

Page 25: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

● ไม install package● ไม upgrade● ไม remove หรือ downgrade● ไม patch แมแต security bug● ไมแกไฟล config

เปนไปไมได

ทําอยางไร ระบบบน Production จึงจะไมพัง?

25

Page 26: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ทําอยางไร ระบบบน Production จึงจะไมพัง?

26

● ไม install package● ไม upgrade● ไม remove หรือ downgrade● ไม patch แมแต security bug● ไมแกไฟล config

Software Container

ชวยได

Container Isolation

Page 27: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Isolation ในระดับที่กันชองโหวของ Kernel ได

27

Page 28: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Isolation ในระดับที่กันชองโหวของ Kernel ได

28

Page 29: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Pet vs. Cattle

29https://pixabay.com/en/kittens-cat-cat-puppy-rush-555822/

Page 30: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Pet vs. Cattle

30http://www.geograph.org.uk/photo/236877

Page 31: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ใช Cloud ใหเปน Cloud

31https://pixabay.com/en/photos/clouds/

Page 32: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ทําไมระบบแบบเดิม Scale ไดยาก?

32

เครื่อง+ สภาพแวดลอม

ระบบงาน

Page 33: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ทําไมระบบแบบเดิม Scale ไดยาก?

33

เครื่อง (VM)

ระบบงาน

เครื่อง

ระบบ

เครื่อง

ระบบ

เครื่อง

ระบบงาน

Page 34: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

สภาพแวดลอม

แยก ระบบ (และสภาพแวดลอม) ออกจาก เครื่อง

34

เครื่อง

ระบบงาน

เครื่อง

เครื่อง

Page 35: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Container Isolation - เริ่มที่ Dev

35

Page 36: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Glossary● Docker

● Docker Engine

● Docker Client

● Docker Daemon

● Docker Cluster

● Docker Containers● Docker Images● Docker Registry (Hub)

36

Page 37: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ติดตั้ง Docker

37

Page 38: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

38

Page 39: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker for Mac & Windows

● วิธีการที่งายที่สุดสําหรับเริ่มใช Docker

○ บน OS ที่ไมใช Linux

● https://docs.docker.com/engine/installation/windows/

● https://docs.docker.com/engine/installation/mac/

39

Page 40: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

บน Linux - Docker Installation

40

Page 41: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Test and Experimental Channels● Test Channel

https://test.docker.com

● Experimental Channel

https://experimental.docker.com

41

Page 42: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Software in Docker Toolbox● Docker Machine

● Docker Compose

● Docker Client

● VirtualBox

● Kitematic

42

Page 43: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker - Check Version

43

Page 44: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Command Line$ docker version

44

Page 45: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

การเขียน Dockerfile

45

Page 46: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Dockerfile: FROMFROM php:5.6.17-apache

46

Page 47: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Command “build” & “images”$ docker build -t app .

47

Page 48: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Command “build” & “images”

$ docker images

48

Page 49: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Dockerfile Instructions● FROM● MAINTAINER● ADD● COPY● RUN● ENTRYPOINT● CMD

49

Page 50: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Dockerfile Example: busybox glibc

50

Page 51: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Dockerfile Example: php 5.5

51

Page 52: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Inside our “app” container$ docker run -i -t app /bin/bash

# ls -al

# exit

52

Page 53: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Prepare a programFile: src/index.php

<?php

phpinfo()

?>

53

Page 54: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Dockerfile: COPYFile: Dockerfile

FROM php:5.6.17-apache

COPY src/ /var/www/html

54

Page 55: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Copy programs and re-build$ docker build -t app .

55

Page 56: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker: run$ docker run -p 80:80 -t app

Ctrl-C to exit (but the container is still running)

56

Page 57: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

57

Page 58: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

58

Docker: ps$ docker ps

Page 59: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker: ps -q# Show only the container’s IDs

$ docker ps -q

59

Page 60: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker: rm$ docker rm <container ID>

60

Page 61: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker: rm -f

$ docker rm -f <container ID>

61

Page 62: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Commands #1● attach Attach to a running container● build Build an image from a Dockerfile● commit Create a new image from a container's changes● cp Copy files/folders between a container and the local filesystem● create Create a new container

62

Page 63: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Commands #2● diff Inspect changes on a container's filesystem● events Get real time events from the server● exec Run a command in a running container● export Export a container's filesystem as a tar archive● history Show the history of an image

63

Page 64: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Commands #3● images List images● import Import the contents from a tarball to create a filesystem image● info Display system-wide information● inspect Return low-level information on a container or image● kill Kill a running container

64

Page 65: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Commands #4● load Load an image from a tar archive or STDIN● login Register or log in to a Docker registry● logout Log out from a Docker registry● logs Fetch the logs of a container● network Manage Docker networks

65

Page 66: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Commands #5● pause Pause all processes within a container● port List port mappings or a specific mapping for the CONTAINER● ps List containers● pull Pull an image or a repository from a registry● push Push an image or a repository to a registry

66

Page 67: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Commands #6● rename Rename a container● restart Restart a container● rm Remove one or more containers● rmi Remove one or more images● run Run a command in a new container

67

Page 68: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Commands #7● save Save an image(s) to a tar archive● search Search the Docker Hub for images● start Start one or more stopped containers● stats Display a live stream of container(s) resource usage statistics● stop Stop a running container

68

Page 69: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Commands #8● tag Tag an image into a repository● top Display the running processes of a container● unpause Unpause all processes within a container● update Update resources of one or more containers● version Show the Docker version information● volume Manage Docker volumes● wait Block until a container stops, then print its exit code

69

Page 70: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ลดขนาด Docker Image

70

Page 71: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Image Size Reduction Techniques● Squash Image● Use smaller base image (e.g. Alpine)● Combine installation commands (RUN in Dockerfile)

71

Page 72: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Squash Image

72

Page 73: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Squash Image

73

$ docker save <image id> \

| docker-squash -from root -t <tag name> \

| docker load

Page 74: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Dockerfile: issue a single RUN commandFROM <base image>

RUN apt-get install … \

&& apt-get

&& rm ...

74

Page 75: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Use Alpine as Base ImageFROM alpine:latest

RUN <use alpine package manager>

75

Page 76: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

เตรียม Image ดวย AlpineFROM alpine:3.2

RUN apk update && apk add nginx

76

Page 77: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

วางระบบ Build

77

Page 78: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

DevOps

78

Page 79: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

DevOps

79

Page 80: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

“ก็โปรแกรมมันเวิรคแลวในเครื่องหนู”

80

Page 81: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

การเตรียม Continuous Integration ดวย Docker1. เก็บ Docker base images ไวใน Docker Registry2. ดึง Codes จาก Version Control (เชน Git)3. ระบบจะ build และทดสอบ Docker images สําหรับแตละ Configuration4. เมื่อ tests ผาน แลว Docker image จะถูก push ไปไวใน Registry5. บน Production จะทําการ update Docker images ตัวใหมไปรันเปน Container

81https://www.docker.com/sites/default/files/UseCase/RA_CI%20with%20Docker_08.25.2015.pdf

Page 82: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Build Pipeline

82

Production

Page 83: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Jenkins Example

83

https://jenkins.dockerproject.org/view/Swarm/job/Swarm-PRs%20(engine%20master)/lastSuccessfulBuild/console

Page 84: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Jenkins Image

84

Page 85: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Jenkins “test-docker” Project

85

Page 86: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Jenkins - Add Plugins

86

● Docker Plugin● GitHub Plugin

○ หรือ Plugin ของ Version Control ระบบอื่น ๆ● Docker Binary inside Jenkins

○ หรือ Set ที่ Docker-common plugin

Page 87: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Link from Jenkins to Git Repository

87

Page 88: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Build Steps

88

Page 89: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

GitHub Hook

89

Page 90: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Pull from Git Repository

90

Page 91: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Ready to Deploy

91

Page 92: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ใช Docker สําหรับพัฒนาโปรแกรม

92

Page 93: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Onbuild Image

93

● เหมือน Abstract Class ใน OOP

เชน

● ONBUILD COPY src/ /app/src○ เพิ่มไฟลจาก src/ เขาไปใน “image ลูก” ตอนสั่ง build

Page 94: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Java Microservices และ Docker

94

Page 95: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Java - Spring Boot

95

http://containertutorials.com/docker-compose/spring-boot-app.html

● Maven Build● Gradle Build

Page 96: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Java - Spring Boot

96

Page 97: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Java - Tomcat

97

● A Small Tomcat Image

https://github.com/jeanblanchard/docker-tomcat/blob/master/Dockerfile

Page 98: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Node.JS

98

Page 99: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Node.JS onbuild Image

99

Page 100: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Ruby on Rails

100

Page 101: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Ruby on Rails

101

Page 102: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

สราง Cluster ดวย Docker Swarm

102

Page 103: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Swarm

103

Page 104: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Concept ของการ Clustering● กอน 1.12● ฟอรม Docker Engine หลาย ๆ ตัวรวมกันเปน Virtual Engine ตัวเดียว● ผานระบบคลาย Proxy == Docker Swarm● API ของ Swarm และ Engine ใชชุดเดียวกัน● ทีม Docker Swarm จะพยายาม keep ให compatibility เปน 100% เสมอ

104

Page 105: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Cluster Components● 1 Discovery Service● 1 Master● N Nodes

105

Page 106: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

HA Cluster Components● 3 Discovery Service● 3 Master● N Nodes

106

Page 107: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Concept ของการ Clustering: Discovery● ตองมีตัวกลางสําหรับเก็บขอมูล Node● ตัวกลางเรียกวา Cluster Store (KV Store)● Concept ใน Swarm เรียกตัวกลางวา Discovery Service

○ Etcd○ Consul○ ZooKeeper○ File○ Node

107

Page 108: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Concept ของการ Clustering: Strategy● ตัว Cluster มี Strategy ในการเลือก Node ให Container● ตัวปกติคือ Spread

○ กระจายใหมากที่สุด == Performance● การคํานวณใช 2 แกน

○ CPU ของ Node○ Memory ของ Node

● ◌ฺBinpack○ อัดแนนสุด

● Random○ สุม

108

Page 109: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Concept ของการ Clustering: Filters● Health

○ กรอง node ที่ตายทิ้ง● Port

○ กรอง node ที่ port ไมวางทิ้ง● Dependency● Affinity● Constraint

109

Page 110: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Concept ของการ Clustering: Filters● Health● Port● Dependency

○ วาง container ที่โยงกันไวใน ◌nืode เดียวกัน● Affinity● Constraint

110

Page 111: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Concept ของการ Clustering: Filters● Health● Port● Dependency● Affinity

○ เลือก node ตาม container หรือ image บน node นั้น ๆ

● Constraint○ เลือก node ตาม label ของ node

111

Page 112: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Provision Cluster via Docker Machine● ใช Docker Machine ชวยในการเชื่อมตอ cluster มายังโลกภายนอก

112

Page 113: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine

113

Page 114: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine

114

● Tool สําหรับทําการ provision เครื่องใหพรอมใชงาน Docker● ถาเตรียมเครื่องอยางระมัดระวังจะสามารถยาย Container ไปรันขาม Cloud Provider ได

อยางสะดวก● ปกติ Image จะเปน Ubuntu● แนะนํา Debian 8 (Jessie) Image

○ Kernel 3.16○ ปญหานอย○ Test แลว Provision ไดงายทั้งบน DigitalOcean และ OpenStack○ ปู Virtual Network งาย○ ม ีKernel Module คอนขางครบ

Page 115: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine Drivers● amazonec2● azure● digitalocean● exoscale● generic● google● hyperv

115

● openstack● rackspace● softlayer● virtualbox● vmwarefusion● vmwarevcloudair● vmwarevsphere

Page 116: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine: create$ docker-machine create \

--driver virtualbox \box2

116

Page 117: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Debian Jessie Machine$ export DIGITALOCEAN_IMAGE=debian-8-x64$ docker-machine create --driver digitalocean \ --digitalocean-image=debian-8-x64 \ ocean-1

117

Page 118: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine: ls - List$ docker-machine lsNAME ACTIVE URL STATE URL SWARM DOCKER ERRORSos-1 - openstack Running tcp://xx.xx.xx.xx:2376 v1.10.0-rc2os-2 - openstack Running tcp://xx.xx.xx.xx:2376 v1.10.0-rc2

$ docker-machine ls -f "{{.Name}}"os-1os-2

118

Page 119: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine: rm - Remove● Manual confirmation

$ docker-machine rm os-1

● Auto confirmation

$ docker-machine rm -y os-1

● Force remove

$ docker-machine rm -f os-1

119

ระวังเครื่องบนคลาวดอาจจะยังคางอยู

Page 120: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Engine Options● สงให Docker Machine● เพื่อทําการ customize Docker Engine ระหวางการ provision

● เชน อยากกําหนดปาย region● --engine-label region=thai● --engine-label region=china● --engine-label region=usa

120

Page 121: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Engine Storage Drivers● AUFS● DeviceMapper (Thin Provision)● BTRFS● Overlay

○ บางครั้งตอง modprobe กอน● ใช --engine-storage-driver ใน Docker Machine

121

Page 122: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Engine Logging Drivers

122

Page 123: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Gelf Logging Driver

123

$ docker run --log-driver=gelf --log-opt gelf-address=udp://192.168.0.42:12201

Page 124: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Discovery in Docker Engine● เมื่อกอนเปน code ใน Docker Swarm ตอนนี้คอย ๆ ยายไป Docker Engine

● 3 options สําหรับ setup overlay network● --engine-opt

○ --cluster-store○ --cluster-advertise○ --cluster-store-opt

124

Page 125: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Discovery in Docker Engine● ตั้ง Cluster Store

○ ใช Consul● เตรียม Node Advertising to Cluster Store

○ --cluster-advertise eth0:2376

125

Page 126: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Provision on OpenStack

126

Page 127: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

OpenStack Network

127

Page 128: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

OpenStack RC File

128

ไฟลตั้งคาพารามิเตอรของ OpenStack

โหลดไดจาก Horizon Dashboard

$ source ./openrc.sh (แลวแตวาโหลดลงมาแลวชื่ออะไร)

Page 129: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

OpenStack Provision Parameters● --openstack-flavor-name

○ “m1.small”● --openstack-image-name

○ เชน “Debian-8.2-x86_64” (ดูจากรายการ Image ใน Horizon)

● --openstack-ssh-user○ root○ centos○ debian

● --openstack-net-name○ private network name ที่ตอผาน Virtual Router

● --openstack-floatingip-pool○ เชน public_network

129

Page 130: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Provision on DigitalOcean

130

Page 131: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

DigitalOcean Provision Parameters● --digitalocean-access-token

○ secret● --digitalocean-region

○ nyc3○ sgp1

● --digitalocean-ssh-user○ root○ centos○ debian

131

Page 132: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Creating a Cluster● 1 Discovery Service

○ เราจะใช consul● 1 Node สําหรับ Swarm Master

○ รันตัว Manager (เปน node ดวย)● 2 Node สําหรับ Engine

132

Page 133: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Provision a ClusterHands On

133

Page 134: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine: env - Environmentใชตอเซ็ตการเชื่อมตอใหคําสั่ง docker & docker-compose ผาน Environment Variables

● เชื่อมตอปกติ

$ eval $(docker-machine config node-1)$ docker ps

● เชื่อมตอแบบคลัสเตอร

$ eval $(docker-machine env --swarm node-master)$ docker ps

134

Page 135: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine: config - Configurationใชตอคําสั่ง docker ถาตองการเลี่ยงการเซ็ต Environment Variables

● เชื่อมตอปกติ

$ docker $(docker-machine config node-1) ps

● เชื่อมตอแบบคลัสเตอร

$ docker $(docker-machine config --swarm node-master) ps

135

Page 136: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine: ip - Show IP Address$ docker-machine ip node-1

136

Page 137: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine: ssh - Secured Shell$ docker-machine ssh node-1

137

Page 138: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Machine: scp - Copy files across machines● คัดลอกไฟลขามจากเครื่องนึงไปอีกเครื่องนึง

○ โดยไมตองยายมาเครื่องกลางกอน

$ docker-machine scp -r ocean-master:/etc/ceph ocean-1:/etc/ceph

138

Page 139: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Using our Swarm ClusterHands on

139

Page 140: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Ex: รัน Container ตาม Zone

140

$ docker run -d -e constraint:region==thai nginx

ปาย region เปนสิ่งที่กําหนดขึ้นเองตอน provision

Page 141: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Ex: รัน Container ตาม Node

141

$ docker run -d -e constraint:node!=master nginx

Page 142: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Ex: สราง Container และรันบน Node ที่สราง

142

$ docker build --build-arg constraint:node==node-1 -t app .

รัน container บนโหนดที่มี image ชื่อ app

$ docker run -d -e affinity:image==app -t app

Page 143: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Ex: Soft Constraint

143

ใชตัว tild ( ~ ) เพื่อบอกวา Constraint เปนแบบ Soft

ถาเปน Soft Constraint แลวเงื่อนไขไมตรงก็จะยัง run container

$ docker run -d -e constraint:region==~europe -t app

เราไมไดกําหนด region เปน europe ไว แต app ก็จะรันบน node ใด ◌ืnode หนึ่ง

Page 144: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

เตรียม Docker Network

144

Page 145: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Linux vxlan - L2 Network Virtualization

145

vxlan ทํางานบน L2 (เปน L2 packet ที่ encapsulated ดวย L3 ของ network จริง)

libnetwork’s overlay driver ทํางานบน L3

(Calico driver ทํางานบน L3)

โดยหลักการแลวสามารถใช service ตั้งแต L4 ขึ้นไป ไดทุกแบบ

Page 146: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Network Types● Bridge● Host● Custom

○ เชน overlay○ หรือ Calico (3rd party)

146

Page 147: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Network Create: overlay$ docker network create --driver overlay <name>

ถา config ถูกตองจะเห็น network ID เดียวกันทั้ง cluster

147

Page 148: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Networking

148

Page 149: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Container with 2 Networks$ docker create ...

$ docker network connect <network> <container id>

$ docker start <container id>

149

Page 150: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker 1.12 Swarm mode● แตกตางจาก Docker Swarm ในเชิง concept● Rewrite from Scratch● Concepts of

○ Services○ Tasks

150

Page 151: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Swarm Mode

151

Engine

$ docker swarm init

Page 152: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Swarm Mode

152

Engine

$ docker swarm init

$ docker swarm join <IP of manager>:2377

Engine

Page 153: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Swarm Mode

153

Engine

Engine

Engine

EngineEngine Engine

$ docker swarm init

$ docker swarm join <IP of manager>:2377

Page 154: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

สราง Services

154

Engine

Engine

Engine

EngineEngine Engine

$ docker service create --replicas 3 --name frontend --network mynet

--publish 80:80/tcp frontend_image:latest

mynet

Page 155: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ถา Node ลม

155

Engine

Engine

Engine

EngineEngine Engine

$ docker service create --replicas 3 --name frontend --network mynet

--publish 80:80/tcp frontend_image:latest

$ docker service create --name redis --network mynet redis:latest

mynet

Page 156: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ถา Node ลม

156

Engine

Engine

Engine

EngineEngine Engine

$ docker service create --replicas 3 --name frontend --network mynet

--publish 80:80/tcp frontend_image:latest

$ docker service create --name redis --network mynet redis:latest

mynet

Page 157: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

สถานะที่ตองการ ≠ สถานะจริง

157

Engine

Engine

Engine

EngineEngine

$ docker service create --replicas 3 --name frontend --network mynet

--publish 80:80/tcp frontend_image:latest

$ docker service create --name redis --network mynet redis:latest

mynet

Page 158: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

ระบบจะพยายามปรับกลับ

158

Engine

Engine

Engine

EngineEngine

$ docker service create --replicas 3 --name frontend --network mynet

--publish 80:80/tcp frontend_image:latest

$ docker service create --name redis --network mynet redis:latest

mynet

Page 159: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

การ Scale

159

Engine

Engine

Engine

EngineEngine

$ docker service scale frontend=6

mynet

Page 160: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

การ Scale

160

Engine

Engine

Engine

EngineEngine

$ docker service scale frontend=10

mynet

Page 161: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Global Service

161

Engine

Engine

Engine

EngineEngine

$ docker service create --mode=global --name prometheus prom/prometheus

mynet

Page 162: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Constraints

162

Engine

Engine

Engine

EngineEngine Engine

docker daemon --label com.example.storage="ssd"

docker daemon --label com.example.storage="ssd"

Page 163: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Constraints

163

Engine

Engine

Engine

EngineEngine

$ docker service create --replicas 3 --name frontend --network mynet

--publish 80:80/tcp --constraint com.example.storage="ssd" frontend_image:latest

Engine

docker daemon --label com.example.storage="ssd"

docker daemon --label com.example.storage="ssd"

Page 164: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Constraints

164

Engine

Engine

Engine

EngineEngine

$ docker service create --replicas 3 --name frontend --network mynet

--publish 80:80/tcp --constraint com.example.storage="ssd" frontend_image:latest

$ docker service scale frontend=10

Engine

docker daemon --label com.example.storage="ssd"

docker daemon --label com.example.storage="ssd"

Page 165: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Node

Node

Node

NodeNode

Node

Swarm Topology

Node

Node

Node

Node

Node

Node

Page 166: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Node

Node

Node

NodeNode

Node

Swarm Topology

Node

Node

Node

Node

Node

Node

Manager

Worker

Page 167: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Node

Node

Node

NodeNode

Node

Swarm Topology

Node

Node

Node

Node

Node

Node

Manager

Worker

● Each Node has a role● Roles are dynamic● Programmable Topology

Page 168: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Manager ManagerManager

Worker WorkerWorkerWorker WorkerWorker Worker

Internal Distributed State Store

Raft consensus group

Docker Swarm Communication Internals

Gossip network

gRPC

Page 169: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Manager ManagerManager

Internal Distributed State Store

Raft consensus group

Quorum Layer

● Strongly consistent: Holds desired state● Simple to operate● Blazing fast (in-memory reads, domain specific indexing, ...)● Secure

Page 170: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Worker WorkerWorkerWorker WorkerWorker Worker

Worker-to-Worker Gossip

Gossip network

● Eventually consistent: Routing mesh, load balancing rules, ...● High volume, p2p network between workers● Secure: Symmetric encryption with key rotation in Raft

Page 171: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Services and Tasksคอนเซ็ปใหมใน Docker 1.12+

● docker service create● 1 service มี N tasks

171

Page 172: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Services are grouped into stacks

Page 173: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Distributed Application Bundle (.dab) declares a stack

Service A

Service B

Service C

Service A

Redis 1

Services Tasks Containers

Redis 2

Redis 3

Redis:tag

Redis:tag

Redis:tag

Page 174: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Swarm mode orchestration is optional

● You don’t have to use it● 1.12 is fully backwards compatible● Will not break existing deployments and scripts

Page 175: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Routing Mesh• Operator reserves a

swarm-wide ingress port (80) for myapp

• Every node listens on 80• Container-aware routing mesh

can transparently reroute traffic from Worker3 to a node that is running container

• Built in load balancing into the Engine

• DNS-based service discovery

Worker 1

:80

Manager

User accesses myapp.com:8080:80

Worker 2

:80

Worker 3

:80

frontend frontend

$ docker service create --replicas 3 --name frontend --network mynet

--publish 80:80/tcp frontend_image:latest

frontend

Page 176: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Routing Mesh: Published Ports• Operator reserves a

swarm-wide ingress port (8080) for myapp

• Every node listens on 8080• Container-aware routing mesh

can transparently reroute traffic from Worker3 to a node that is running container

• Built in load balancing into the Engine

• DNS-based service discovery

Worker 1

:8080

Manager

User accesses myapp.com:8080:8080

Worker 2

:8080

Worker 3

:8080

frontend frontend

$ docker service create --replicas 3 --name frontend --network mynet

--publish 8080:80/tcp frontend_image:latest

frontend

Page 177: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Security out of the box

● Cryptographic Node Identity○ Workload segregation (think PCI)

● There is no “insecure mode”:○ TLS mutual auth○ TLS encryption○ Certificate rotation

Page 178: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

HEALTHCHECK --interval=5m --timeout=3s --retries 3 CMD curl -f http://localhost/ || exit 1

Checks every 5 minutes that web server can return index page within 3 seconds.

Three consecutive failures puts container in an unhealthy state.

Container Health Check in Dockerfile

Page 179: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

docker plugin install tiborvass/no-remove

docker plugin enable no-remove

docker plugin disable no-remove

New Plugin Subcommands (Experimental)

Page 180: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

$ docker plugin install tiborvass/no-removePlugin "mikegoelzer/myplugin:latest" requested the following privileges: - Networking: host - Mounting host path: /dataDo you grant the above permissions? [y/N]

Plugin Permissions Model

Page 181: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

API

Allocator

Orchestrator

Scheduler

Dispatcher

RAFT

Manager Node

Worker

ExecutorWorker Node

Accepts command from client and creates service object

Reconciliation loop for service objects and creates tasks

Allocates IP addresses to tasks

Assigns nodes to tasks

Checks in on workers

docker service create

Connects to dispatcher to check on assigned tasks

Node Breakdown

Executes the tasks assigned to worker node

Page 182: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ
Page 183: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ
Page 184: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Secure by default with end to end encryption

• Cryptographic node identity

• Automatic encryption and mutual auth (TLS)

• Automatic cert rotation• External CA integration

Manager Node

CertificateAuthority

TLS

Manager Node

CertificateAuthority

TLS

Manager Node

CertificateAuthority

TLS

Worker

TLS

Worker

TLS

Worker

TLS

Page 185: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Compose บน Docker Network

185

Page 186: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Compose

186

Page 187: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Compose

187

● จัดเอา container มาโยงกันเปนกลุม● เพื่ออธิบาย application● เชน

app ประกอบไปดวย front โยงหา web และมี db เปนตัวเก็บขอมูล

● การ scale ควรทําในระดับ app ○ เปน best practice จาก concept ของ Pod ใน Kubernetes

Page 188: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Compose

188

// เตรียมแอพพลิเคชัน “app”

version: 2

services:

web:

build: .

ports:

- "8000:8000"

db:

image: postgres

● จะได Network ชื่อ “app_default”● web และ db จะเขาไปอยูดวยกันใน Network ◌น้ี้● ยกตัวอยาง เชน web สามารถโยงหา Dabase

ไดโดยอางถึง postgres://db:5432

Page 189: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Compose

189

// เตรียมแอพพลิเคชัน “app”

version: 2

services:

proxy:

build: ./proxy

networks:

- front

web:

build: ./web

networks:

- front

- back

db:

image: postgres

networks:

- back

networks:

front:

driver: overlay

back:

driver: calico-ipam-driver

driver_opts:

foo: "1"

bar: "2"

Page 190: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Compose - default network

190

version: 2

services:

web:

build: .

ports:

- "8000:8000"

db:

image: postgres

networks:

default:

driver: overlay

● ระบุ default Network ให app

Page 191: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker Compose - external network

191

version: 2

services:

web:

build: .

ports:

- "8000:8000"

db:

image: postgres

networks:

default:

external:

name: multihost

● สราง Network “multihost” ไวแลว● service ทั้งหมดใน app นี้ใช “multihost” เปน

default Network

Page 192: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Up and Runเตรียมไฟล docker-compose.yml

$ cd app

$ docker-compose up -d

192

Page 193: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Docker ComposeHands On

193

Page 194: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Discovery ServiceFile: compose.yml

consul: image: "progrium/consul:latest" container_name: "consul" hostname: "consul" ports: - "8400:8400" - "8500:8500" - "53:53" command: "-server -bootstrap-expect 1 -ui-dir /ui"

194

Page 195: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Towards Software-Defined Infrastructure

195

Page 196: Docker Workshop - Thaiopenstack · Docker Swarm พัฒนาระบบจัดการคลัสเตอร สําหรับ Docker Scale ได ถึงระดับ

Question ?

196