小白学Docker之Swarm

2018-02-10 13:06:45来源:cnblogs.com作者:_糊一笑人点击

分享

承接上篇文章:小白学Docker之Compose,自学网站来源于https://docs.docker.com/get-started

系列文章:

  • 小白学Docker之基础篇
  • 小白学Docker之Compose
  • 小白学Docker之Swarm

概念

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

创建一个集群

Mac,Linux,Window7和8虚拟主机安装

Mac,Linux,Window7和8需要在本地安装虚拟机来创建虚拟主机,如果你已经配置了Docker Toolbox,那么就已经安装了Virtual Box,因此不需要重新安装

创建完之后运行下面的命令就可以在本地创建虚拟主机了:

docker-machine create --driver virtualbox myvm1docker-machine create --driver virtualbox myvm2

Windows 10虚拟主机安装

创建共享虚拟交换机,以便各个虚拟主机能够相互之间进行连接。

Virtual Switch(vSwitch)相当于一个虚拟的二层交换机,该交换机连接虚拟网卡和物理网卡,将虚拟机上的数据报文从物理网口转发出去。与物理交换机一样,vSwitch的作用就是用来转发数据。

  1. 启动Hyper-V管理器

docker-Hyper-V

  1. 进入管理页面之后,找到右手边的虚拟交换机管理器

switch-manager

  1. 打开管理器,创建虚拟交换机

v-switch

  1. 进行虚拟交换机配置

v-switch-config

之后执行下面的命令就可以创建虚拟主机了:

docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm2 

docker-machine-create

虚拟主机列表以及IP

docker-machine ls

docker-machine-ls

初始化集群并且添加节点

将myvm1这台主机作为集群管理机,将myvm2作为工作节点加入到集群中,使用docker-machine ssh连接到虚拟机,使用docker swarm init来初始化节点。

docker-machine ssh myvm1 "docker swarm init --advertise-addr 10.5.21.30"

docker-swarm-int

将myvm2加入到swarm节点

docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-3k3mev52t5hegvsgoagqhmw05eknp3gbnbe3qnbk78lenyxmy0-21x31f58ehp323w92tqjqazv6 10.5.21.30:2377"

docker-swarm-node-add

运行docker node ls查看集群中的节点:

docker-machine ssh myvm1 "docker node ls"

docker-swarm-nodels

让你的shell直接和集群主机对话

进行这个配置之后,就可以直接连接到集群主机了,以前你必须通过ssh先连接到主机执行命令,进行环境配置之后,你就可以直接使用类似docker-machine ls的命令了

Mac,Linux配置

# 1. 运行 docker-machine env myvm1$ docker-machine env myvm1export DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/Users/sam/.docker/machine/machines/myvm1"export DOCKER_MACHINE_NAME="myvm1"# Run this command to configure your shell:# eval $(docker-machine env myvm1)# 2. 运行上一个命令结果的最后一句eval $(docker-machine env myvm1)# 3. 使用docker-machine查看结果$ docker-machine lsNAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORSmyvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.06.2-ce   myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v17.06.2-ce  

Windows 10配置

> docker-machine env myvm1docker: 'env' is not a docker command.See 'docker --help'PS C:/WINDOWS/system32> docker-machine env myvm1$Env:DOCKER_TLS_VERIFY = "1"$Env:DOCKER_HOST = "tcp://10.5.21.30:2376"$Env:DOCKER_CERT_PATH = "C:/Users/huyh/.docker/machine/machines/myvm1"$Env:DOCKER_MACHINE_NAME = "myvm1"$Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true"# Run this command to configure your shell:# & "C:/Program Files/Docker/Docker/Resources/bin/docker-machine.exe" env myvm1 | Invoke-Expression> & "C:/Program Files/Docker/Docker/Resources/bin/docker-machine.exe" env myvm1 | Invoke-Expression> docker-machine lsNAME    ACTIVE   DRIVER   STATE     URL                     SWARM   DOCKER        ERRORSmyvm1   *        hyperv   Running   tcp://10.5.21.30:2376           v18.02.0-cemyvm2   -        hyperv   Running   tcp://10.5.21.31:2376           v18.02.0-ce

docker-machine-env

在集群主机上部署应用程序

同Docker Compose里面讲到的一样,现在你可以使用下面的命令在集群上部署你的应用了

docker stack deploy -c docker-compose.yml getstartedlab

查看集群中应用的运行情况

docker stack ps getstartedlab

docker-swarm-deploy

在浏览器中运行http://10.5.21.30来查看集群的负载情况

docker-swarm-hostname

如果你想增加实例数,只需要在docker-compose.yml中修改replicas的数量,然后直接运行docker stack deploy -c docker-compose.yml getstartedlab即可,不需要摧毁stack和容器。

关闭应用和swarm

# Take the app down with docker stack rm:docker stack rm getstartedlab# Take down the swarm.docker-machine ssh myvm2 "docker swarm leave"docker-machine ssh myvm1 "docker swarm leave --force"

离开集群主机shell

eval $(docker-machine env -u)

重启Docker Machine

> $ docker-machine lsNAME    ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORSmyvm1   -        virtualbox   Stopped                 Unknownmyvm2   -        virtualbox   Stopped                 Unknown> $ docker-machine start myvm1Starting "myvm1"...(myvm1) Check network to re-create if needed...(myvm1) Waiting for an IP...Machine "myvm1" was started.Waiting for SSH to be available...Detecting the provisioner...Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.> $ docker-machine start myvm2Starting "myvm2"...(myvm2) Check network to re-create if needed...(myvm2) Waiting for an IP...Machine "myvm2" was started.Waiting for SSH to be available...Detecting the provisioner...Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

GUI图形界面管理

使用visualizer或者portainer镜像来启动GUI图形界面服务,这里使用portainer

  1. 更改docker-compose.yml文件
version: "3"services:  web:    image: rynxiao/get-started:service    deploy:      replicas: 5      resources:        limits:          cpus: "0.1"          memory: 50M      restart_policy:        condition: on-failure    ports:      - "80:80"    networks:      - webnet  portainer:    image: portainer/portainer    ports:      - "9000:9000"    volumes:       - "//var/run/docker.sock:/var/run/docker.sock"     deploy:      replicas: 1      placement:        constraints: [node.role == manager]networks:  webnet:
  1. 重启服务:
docker stack deploy -c docker-compose.yml getstartedlab
  1. 在浏览器中输入http://10.5.21.30:9000

docker-gui-portainer

参考链接

  • https://docs.docker.com/get-started/part4/#restarting-docker-machines
  • http://www.cnblogs.com/xishuai/p/docker-swarm.html

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台