swarm :多主機 多容器管理
在docker 1.13中,集成了docker swarm命令
如果你看到要單獨起swar容器docker run swarm,那說明是老版的
先安裝docker-machine docker-compose,docker三劍客一起搞基
安裝Docker Machine(Linux)
curl -L https://github.com/docker/machine/releases/download/v0.9.0-rc2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
安裝Docker compose
pip install docker-compose
好了,工具准備好了,我們正式開始:
集群主要架構:3個worker,2個manager
# 創建管理節點 docker-machine create --driver virtualbox manager1 docker-machine create --driver virtualbox manager2 # 創建工作節點 docker-machine create --driver virtualbox worker1 docker-machine create --driver virtualbox worker2 docker-machine create --driver virtualbox worker3
查看環境變量
docker-machine env manager1 docker-machine ip manager1 docker-machine ssh manager1 “command” # 連接manager1運行命令
創建集群
docker-machine ssh manager1 docker swarm init --listen-addr 192.168.99.101:2377 --advertise-addr 192.168.99.101
id 用manager1的ip
你會看到返回一條命令,連入其他主機運行該命令(啥也不用改)就能以worker身份加入集群
docker-machine ssh worker1 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377 docker-machine ssh worker2 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377 docker-machine ssh worker3 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377
查看節點
docker-machine ssh manager1 docker node ls
查看是否加入成功
下面加入管理節點
# 獲取manage token docker-machine ssh manager1 docker swarm join-token manager # 運行命令 docker-machine ssh manager2 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377
再次查看節點
docker-machine ssh manager1 docker node ls
查看是否加入成功
下面用幾個命令熟悉一下:
# 創建一個overlay網絡 docker network create --driver overlay swarm_test # pull鏡像到節點 docker-machine ssh manager1 docker pull nginx:alpine # 多節點使用swarm_test組成一組服務 docker service create --replicas 2 --name helloworld --network=swarm_test nginx:alpine --replicas 啟動幾個容器 # 查看服務狀態 docker service ls # 查看 helloworld 服務詳情 docker service ps helloworld # 進入節點查看 docker-machine ssh manager1 docker ps -a # 進入節點1執行ping命令節點2: docker-machine ssh manager1 docker exec -i helloworld.1.ay081uome3eejeg4mspa8pdlx \ ping helloworld.2.16cvore0c96rby1vp0sny3mvt ssh連上集群,exec進入容器 運行ping命令
# 刪除服務 docker service rm helloworld # 新建端口映射的服務 docker service create --replicas 2 --name helloworld -p 7080:80 --network=swarm_test nginx:alpine # 殺死節點 docker-machine ssh worker2 docker kill helloworld.2.7acmhj0udzusv1d7lu2tbuhu4 # 啟動3個節點 docker service scale helloworld=3
下面用docker-compose運行一個投票網站:
在當前目錄新建文件
version: "3" services: redis: image: redis:alpine ports: - "6379" networks: - frontend deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks: - backend deploy: placement: constraints: [node.role == manager] vote: image: dockersamples/examplevotingapp_vote:before ports: - 5000:80 networks: - frontend depends_on: - redis deploy: replicas: 2 update_config: parallelism: 2 restart_policy: condition: on-failure result: image: dockersamples/examplevotingapp_result:before ports: - 5001:80 networks: - backend depends_on: - db deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure worker: image: dockersamples/examplevotingapp_worker networks: - frontend - backend deploy: mode: replicated replicas: 1 labels: [APP=VOTING] restart_policy: condition: on-failure delay: 10s max_attempts: 3 window: 120s visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" stop_grace_period: 1m30s volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: frontend: backend: volumes: db-data:
# 拷貝文件到集群 docker-machine scp docker-compose.yml manager1:~ # 部署 docker-machine ssh manager1 "docker stack deploy -c docker-compose.yml vote" # 啟動情況 docker-machine ssh manager1 "docker stack ps vote"
訪問網站:
ip:5000
ip:5001
ip:8080
附上官網上的命令:
docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux) docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10 docker-machine env myvm1 # View basic information about your node docker-machine ssh myvm1 "docker node ls" # List the nodes in your swarm docker-machine ssh myvm1 "docker node inspect <node ID>" # Inspect a node docker-machine ssh myvm1 "docker swarm join-token -q worker" # View join token docker-machine ssh myvm1 # Open an SSH session with the VM; type "exit" to end docker-machine ssh myvm2 "docker swarm leave" # Make the worker leave the swarm docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm docker-machine start myvm1 # Start a VM that is currently not running docker-machine stop $(docker-machine ls -q) # Stop all running VMs docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" # Deploy an app