docker 官方文档(四)swarm
一、安装docker machine
$ base=http://github.com/docker/machine/releases/download/v0.14.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo install /tmp/docker-machine /usr/local/bin/docker-machine
备注:官网上的地址是https,但是下载过程中出现:
Fail connect to github-production-release-asset-2e65be.s3.amazonaws.com:443
可以将https变为http便可下载成功。
sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian/dists xenial contrib" >> /etc/apt/sources.list.d/virtualbox.list' wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - sudo apt update sudo apt install virtualbox-5.2
注意官网中的地址已经变为增加/dists。在vm中运行virtualBox会出现问题,可以直接在windows中运行
三、建立一组虚拟机用docker-machine命令
docker-machine create --driver virtualbox dev docker-machine create --driver virtualbox myvm2
显示创建的vms和他们的ip
docker-machine ls
将一个vm设置为manager,系统会自动生成docker swarm join --tokern的信息,将该信息发送给myvm2,将myvm2设置为worker
docker-machine ssh dev "docker swarm init --advertise-addr 192.168.99.101
另一个设置为worker:
docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-20rqpsrv3i7m13crnu8zfgkha7lclp1px35ej2lan6xju71by3-ehspi jmkd13ibutp3abfpatqq 192.168.99.101:2377"
在manger中查看节点信息
docker-machine ssh dev "docker node ls"
四、部署应用在建立的swarm集群上
到目前为止,您已经将Docker命令包装在docker-machine ssh与VM通信中。另一种选择是运行docker-machine env <machine>以获取并运行一个命令,该命令将当前shell配置为与VM上的Docker守护程序通信。此方法适用于下一步,因为它允许您使用本地docker-compose.yml文件“远程”部署应用程序,而无需将其复制到任何位置。
docker-machine env dev
复制出现的命令并执行:
eval $("H:\Docker Toolbox\docker-machine.exe" env dev)
检查是否设置成功:
docker-machine ls
dev的active选项编为*,代表已经将dev的守护进程设置为默认守护进程。
向第三部分一样部署项目并查看
docker stack deploy -c docker-compose.yml getstartedlab
docker stack ps getstartedlab
可以看到应用已经自动部署到了dev和myvm2上面。
你可以从IP地址来访问你的应用程序要么dev或myvm2。
您创建的网络在它们之间共享并进行负载平衡。运行 docker-machine ls以获取VM的IP地址,并在浏览器上访问其中任何一个,点击刷新(或只是curl它们)。
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 node ls # View nodes in swarm (while logged on to manager) 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 ls # list VMs, asterisk shows which VM this shell is talking to docker-machine start myvm1 # Start a VM that is currently not running docker-machine env myvm1 # show environment variables and command for myvm1 eval $(docker-machine env myvm1) # Mac command to connect shell to myvm1 & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression # Windows command to connect shell to myvm1 docker stack deploy -c <file> <app> # Deploy an app; command shell must be set to talk to manager (myvm1), uses local Compose file docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir (only required if you use ssh to connect to manager and deploy the app) docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" # Deploy an app using ssh (you must have first copied the Compose file to myvm1) eval $(docker-machine env -u) # Disconnect shell from VMs, use native docker 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
浙公网安备 33010602011771号