- systemctl stop firewalld(关闭防火墙)
-
- systemctl disable firewalld(开启不开启防火墙)
安装 docker 就已经安装了docker swam )
https://docs.docker.com/engine/install/
- apt-get remove docker docker-engine docker.io containerd runc
- apt-get update
- apt-get install \
- apt-transport-https \
- ca-certificates \
- curl \
- gnupg-agent \
- software-properties-common
-
-
- sudo add-apt-repository \
- "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
- $(lsb_release -cs) \
- stable"
-
-
- apt-get update
-
- apt-get install docker-ce docker-ce-cli containerd.io
安装 dockert-compose 去 Releases · docker/compose (github.com) 找需要的版本
- sudo curl -L https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
-
- sudo chmod +x /usr/local/bin/docker-compose
-
- docker-compose --version
安装Docker Machine Releases · docker/machine (github.com)
- curl -L https://ghproxy.com/https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && \
- chmod +x /usr/local/bin/docker-machine
- docker swarm:集群管理,子命令有 init, join,join-token, leave, update
- docker node:节点管理,子命令有 demote, inspect,ls, promote, rm, ps, update
- docker service:服务管理,子命令有 create, inspect, ps, ls ,rm , scale, update
- docker stack/deploy:试验特性,用于多应用部署,等正式版加进来再说。
docker 组件安装好了,现在搭建集群
- docker-machine create --driver virtualbox manager1
-
- docker-machine env manager1
-
- export DOCKER_TLS_VERIFY="1"
- export DOCKER_HOST="tcp://192.168.99.100:2376"
- export DOCKER_CERT_PATH="/home/zuolan/.docker/machine/machines/manager1"
- export DOCKER_MACHINE_NAME="manager1"
- # Run this command to configure your shell:
- # eval $(docker-machine env manager1)
-
- -----
-
- docker-machine create --driver virtualbox worker1
-
- docker-machine ls
-
-
- 把 manager1 加入集群
- docker-machine ssh manager1 docker swarm init --listen-addr 192.168.99.100:2377 --advertise-addr 192.168.99.100
-
-
- docker swarm join \
- --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r \
- 192.168.99.100:2377
-
-
- 把 work1 加入集群
- docker-machine ssh worker1 docker swarm join --token \
- SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r \
- 192.168.99.100:2377
-
-
- docker-machine ssh manager1 docker node ls
- 此时 manager1 worker1
-
-
- 加 worker2 到集群
- docker-machine ssh worker2 docker swarm join \
- --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r \
- 192.168.99.100:2377
-
- 添加 worker3 到集群
- docker-machine ssh worker3 docker swarm join \
- --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r \
- 192.168.99.100:2377
-
-
- 添加 manager2 到集群
- docker-machine ssh manager1 docker swarm join-token manager 查看token
-
- docker swarm join \
- --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-8tn855hkjdb6usrblo9iu700o \
- 192.168.99.100:2377
-
- docker-machine ssh manager2 docker swarm join \
- --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-8tn855hkjdb6usrblo9iu700o \
- 192.168.99.100:2377
-
-
- manager2 docker node ls
- 此时: manager1/2 worker1/2/3
-
如果提示:

apt install virtualbox
如果提示:

(1)virtualbox 
如果为灰色,找到命令行执行下就可以
c:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyvm "Ubuntu" --nested-hw-virt on
(2)vmvare

如果下面报错:

- docker swarm join \
- --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-8tn855hkjdb6usrblo9iu700o \
- 192.168.99.100:2377
docker node ls。(1台宿主机 5台虚拟机)
会多显示一条

docker network ls 查看网络状态
可以看到在 swarm 上默认已有一个名为 ingress 的 overlay 网络, 默认在 swarm 里使用,本例子中会创建一个新的 overlay 网络。
docker network create --driver overlay swarm_test
- 分别在五个虚拟机节点拉取 nginx:alpine 镜像
- docker-machine ssh manager1 docker pull reg.example.com/library/nginx:alpine
-
- 在五个节点部署一组 Nginx 服务
- docker service create --replicas 2 --name helloworld --network=swarm_test nginx:alpine
- docker service ls 查看服务状态
-
- docker service ps helloworld 查看 helloworld 服务详情
-
-
- docker-machine ssh manager1 docker ps -a
- docker-machine ssh worker2 docker ps -a
-
-
-
- 首先使用 Machine 进入 manager1 节点,然后使用 docker exec -i 命令进入 helloworld.1 容器中 ping 运行在 worker2 节点的 helloworld.2 容器。
- docker-machine ssh manager1 docker exec -i helloworld.1.ay081uome3eejeg4mspa8pdlx
- ping helloworld.2.16cvore0c96rby1vp0sny3mvt
-
- 可以看到这两个跨主机的服务集群里面各个容器是可以互相连接的。
- 我们使用了虚拟机内部的 ping 去测试容器的延迟,可以看到延迟明显比集群内部的 ping 值要高。
- docker service rm helloworld 删掉上一节我们启动的 helloworld 服务
-
- docker service create --replicas 2 --name helloworld -p 7080:80 --network=swarm_test nginx:alpine 部署
-
-
- docker service ls 查看服务运行状态
-
- 现在我们来看 Swarm 另一个有趣的功能,当我们杀死其中一个节点时,会发生什么?
-
- docker-machine ssh worker2 docker kill helloworld.2.7acmhj0udzusv1d7lu2tbuhu4 kill 掉 worker2 的实例
-
-
- docker service ps helloworld 稍等几秒,再来看服务状态:
- Swarm 也会迅速把停止的容器撤下来,同时在节点中启动一个新的实例顶上来 , 这样服务依旧还是两个实例在运行。
-
-
- docker service scale helloworld=3 扩容