Docker summit 2015: 以 Docker Swarm 打造多主機叢集環境
-
Upload
spooky-xie -
Category
Internet
-
view
5.369 -
download
0
Transcript of 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
1 on 1
server database
Links
browser test case
JCConf 2015 workshop: 透過 docker 進⾏ e2e test,以 Gradle 及 Geb 為例http://blog.trunk-studio.com/jcconf2015/
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
external_linksserver
database
server
N on 1
test
preview
https://github.com/TrunkWorkshop/sailsSample
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
https://github.com/TrunkWorkshop/docker-swarm-sample/tree/master/local
Swarm Master
Swarm Node
Swarm Node
Docker Machine
Local & Cloud 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
‣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+
Digital Ocean‣ setup your token
‣ export DIGITALOCEAN_ACCESS_TOKEN=12345
https://github.com/TrunkWorkshop/docker-swarm-sample/tree/master/digitalocean
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
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
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
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
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
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
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
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
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
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