ubuntu 安装 docker swarm 集群

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

如果提示:

 (1)virtualbox ubuntu 安装 docker swarm 集群_第1张图片

 如果为灰色,找到命令行执行下就可以

c:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyvm "Ubuntu" --nested-hw-virt on

(2)vmvare 

如果下面报错:

ubuntu 安装 docker swarm 集群_第2张图片

 

建立跨主机网络

docker swarm join \           
    --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-8tn855hkjdb6usrblo9iu700o \
    192.168.99.100:2377

docker node ls。(1台宿主机 5台虚拟机)

会多显示一条

ubuntu 安装 docker swarm 集群_第3张图片

 
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 值要高。

Swarm 集群负载

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  扩容 

你可能感兴趣的:(linux,运维,服务器)