Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

37
Docker Swarm 蝨ग़Ԇ秚玵褸絑ह 砇蟴 Network Spooky 獺ᑀ虻懱ҙݣӾ

Transcript of Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Page 1: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Docker Swarm

Network

Spooky

Page 2: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Page 3: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Outline‣ Introduce‣ Linking containers together‣ Linking Docker Engine ‣multi-host networking‣Docker Swarm on multiple VM‣Docker Swarm on multiple cloud instance

Page 4: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Docker Orchestration

Page 5: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Linking Containers Together

Page 6: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Linking Containersdocker compose

linksdocker compose

external_linksdocker command

links

Page 7: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

1 on 1

server database

Links

browser test case

JCConf 2015 workshop: 透過 docker 進⾏ e2e test,以 Gradle 及 Geb 為例http://blog.trunk-studio.com/jcconf2015/

Page 8: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

main: container_name: jcconf_main image: trunk/groovy_gradle command: "/bin/bash -l -c 'gradle remoteFirefoxTest'"

links: - client

volumes: - ./:/jcconf_main

working_dir: /jcconf_main

client: container_name: jcconf_client image: vvoyer/docker-selenium-firefox-chrome

ports: - "4444:4444" - "5999:5999"

docker-compose up -d

Links

Page 9: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

external_linksserver

database

server

N on 1

test

preview

https://github.com/TrunkWorkshop/sailsSample

Page 10: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

mysql: container_name: mysql image: dgraziotin/mysql

ports: - "3306:3306" environment: MYSQL_ADMIN_PASS: "root" MYSQL_USER_NAME: "nodejsSample" MYSQL_USER_DB: "nodejsSample" MYSQL_USER_PASS: "nodejsSample" CREATE_MYSQL_BASIC_USER_AND_DB: "true"

volumes: - ../database:/var/lib/mysql/

restart: always

web: container_name: sailsSample image: trunk/sails_env command: "/bin/bash -l -c 'npm start'"

ports: - "1337:1337"

working_dir: /sailsSample volumes: - ./:/sailsSample

external_links: - mysql

restart: always

docker-compose up -d mysql docker-compose up -d web

external_links

Page 11: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Linking Docker Engine

Page 12: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Docker Swarmcloud

Docker Swarm Docker Swarm with Network

localDocker Swarm

Page 13: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

https://github.com/TrunkWorkshop/docker-swarm-sample/tree/master/local

Swarm Master

Swarm Node

Swarm Node

Docker Machine

Local & Cloud Docker Swarm

Page 14: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

docker info

Page 15: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Overlay Network

key-store

consul

Swarm Master

Swarm Node

Docker Machine Container Communication

Docker Engine Control

Docker Engine Register

Cloud Docker Swarm

Digital Ocean

My laptop

Digital Ocean

Google

Page 16: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

‣Port allow‣ Docker Engine port (e.g TCP 2375)‣ VXLAN: UDP 4789‣ Serf: TCP + UDP 7946‣ Key-value store ( e.g for Consul TCP 8500)

‣Support Docker Network feature‣ kernel 3.18+

Page 17: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Digital Ocean‣ setup your token

‣ export DIGITALOCEAN_ACCESS_TOKEN=12345

https://github.com/TrunkWorkshop/docker-swarm-sample/tree/master/digitalocean

Page 18: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Google Cloud Platform‣ gcloud auth login https://cloud.google.com/sdk/

‣ create google-project‣ export GOOGLE_PROJECT='project name'

‣ activate Compute Engine API‣ setup firewall-rules

‣ gcloud compute firewall-rules update default-swarm --allow tcp:2376 tcp:2375 tcp:3376 tcp:8500 UDP:4789 TCP:7946 UDP:7946 --source-range 0.0.0.0/0

‣ gcloud compute firewall-rules create default-demo --allow tcp:5000 tcp:27017 tcp:80 --source-range 0.0.0.0/0

https://github.com/TrunkWorkshop/docker-swarm-sample/tree/master/google

Page 19: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Prepare Muti-Host Docker Environment

Page 20: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

key-store

consul

Docker Machine

create-machine-keystore:docker-machine create \

--driver digitalocean \--digitalocean-image ubuntu-15-10-x64 \

digitalocean-keystore

run-consul:docker run -d \ -p "8500:8500" \ -h "consul" \ progrium/consul -server -bootstrap

create keystore

Digital Ocean

My laptop

Page 21: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

key-store

consulcreate-machine-swarm-master:

docker-machine create \--driver digitalocean \--digitalocean-image ubuntu-15-10-x64 \--swarm --swarm-image="swarm" --swarm-master \--swarm-discovery="consul://$(DOCKER_IP_KEYSTORE):8500" \--engine-opt="cluster-store=consul://$(DOCKER_IP_KEYSTORE):8500" \--engine-opt="cluster-advertise=eth0:2376" \digitalocean-master

Create Swarm Master

Swarm Master

Docker Machine

export DOCKER_IP_KEYSTORE=$(docker-machine ip digitalocean-keystore)

Digital Ocean

My laptop

Digital Ocean

Page 22: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

key-store

consulcreate-machine-swarm-node:

docker-machine create \--driver digitalocean \--digitalocean-image ubuntu-15-10-x64 \--swarm --swarm-image="swarm" \--swarm-discovery="consul://$(DOCKER_IP_KEYSTORE):8500" \--engine-opt="cluster-store=consul://$(DOCKER_IP_KEYSTORE):8500" \--engine-opt="cluster-advertise=eth0:2376" \digitalocean-node

Create Swarm NodeSwarm MasterDocker

Machine

export DOCKER_IP_KEYSTORE=$(docker-machine ip digitalocean-keystore)

Swarm Node

Digital Ocean

My laptop

Digital Ocean

Google

Page 23: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Docker Machine ls

Page 24: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Docker Info

Page 25: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Create Overlay Network

create-network-overlay:docker network create --driver overlay cloud-overlay

Overlay Network

key-store

consul

Swarm Master

Swarm Node

Docker Machine

Digital Ocean

My laptop Digital Ocean

Google

Page 26: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Docker Network ls

digitalocean-master

google-note

Page 27: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Run Docker Containers With

Multi-Host Docker Environment

Page 28: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

OrchestrationDocker ComposeManual Network

Docker Compose Auto Network

DockerCommand

Page 29: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

Docker Commandrun-sample-server:

docker run -itd \--name=web \--net=cloud-overlay \--env="constraint:node==master" \nginx

run-sample-client:docker run -it --rm \--net=cloud-overlay \--env="constraint:node==node" \busybox wget -O- http://web

Overlay Network

key-store

consul

Swarm Master

Swarm Node

Docker Machine

api server

client server

Page 30: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

compose_web: container_name: 'compose_web' image: bfirsh/compose-mongodb-demo environment: - "MONGO_HOST=compose_mongo" - "constraint:node==google-node" net: overlay ports: - "80:5000"

Docker Compose Manual Networkcompose_mongo: container_name: 'compose_mongo' image: mongo environment: - "constraint:node==master" net: overlay

Overlay Networkkey-store

consul

Swarm Master

Swarm Node

Docker Machine

server

database

docker-compose up -d

Page 31: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

compose_web: container_name: 'compose_web' image: bfirsh/compose-mongodb-demo environment: - "MONGO_HOST=compose_mongo" - "constraint:node==google-node" ports: - "80:5000"

Docker Compose Auto Networkcompose_mongo: container_name: 'compose_mongo' image: mongo environment: - "constraint:node==master"

Overlay Networkkey-store

consul

Swarm Master

Swarm Node

Docker Machine

server

database

docker-compose --x-networking --x-network-driver overlay up -d

Page 32: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

cat /etc/hosts

Page 33: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

docker network inspect

Page 34: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
Page 35: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

https://github.com/TrunkWorkshop/docker-swarm-sample

make clean-machine

make create-machine-keystoreeval $(docker-machine env digitalocean-keystore)export DOCKER_IP_KEYSTORE=$(docker-machine ip digitalocean-keystore)make run-consul

make create-machine-swarm-mastermake create-machine-swarm-node

eval $(docker-machine env --swarm digitalocean-master)make create-network-overlaymake run-sample-servermake run-sample-clients

make run-by-compose

Page 36: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境

High availability in Docker Swarmhttps://docs.docker.com/swarm/multi-manager-setup/

Docker-swarm Dockerhttp://blog.trunk-studio.com/docker-swarm-network/

DockerCon EU 2015 Hands-On Labs https://github.com/docker/dceu_tutorials

Page 37: Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境