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 Swarm 入门一篇文章就够了 - 简书
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
如果提示:
如果为灰色,找到命令行执行下就可以
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 扩容