前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小白学Docker之Swarm

小白学Docker之Swarm

作者头像
糊糊糊糊糊了
发布2018-05-09 15:39:18
1.1K0
发布2018-05-09 15:39:18
举报
文章被收录于专栏:糊一笑

承接上篇文章:小白学Docker之基础篇,自学网站来源于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,因此不需要重新安装

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

代码语言:javascript
复制
docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2

Windows 10虚拟主机安装

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

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

  1. 启动Hyper-V管理器
docker-Hyper-V
docker-Hyper-V
  1. 进入管理页面之后,找到右手边的虚拟交换机管理器
switch-manager
switch-manager
  1. 打开管理器,创建虚拟交换机
v-switch
v-switch
  1. 进行虚拟交换机配置
v-switch-config
v-switch-config

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

代码语言:javascript
复制
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm2 
docker-machine-create
docker-machine-create

虚拟主机列表以及IP

代码语言:javascript
复制
docker-machine ls
docker-machine-ls
docker-machine-ls

初始化集群并且添加节点

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

代码语言:javascript
复制
docker-machine ssh myvm1 "docker swarm init --advertise-addr 10.5.21.30"
docker-swarm-int
docker-swarm-int

将myvm2加入到swarm节点

代码语言:javascript
复制
docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-3k3mev52t5hegvsgoagqhmw05eknp3gbnbe
3qnbk78lenyxmy0-21x31f58ehp323w92tqjqazv6 10.5.21.30:2377"
docker-swarm-node-add
docker-swarm-node-add

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

代码语言:javascript
复制
docker-machine ssh myvm1 "docker node ls"
docker-swarm-nodels
docker-swarm-nodels

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

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

Mac,Linux配置
代码语言:javascript
复制
# 1. 运行 docker-machine env myvm1
$ docker-machine env myvm1
export 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 ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   *        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配置
代码语言:javascript
复制
> docker-machine env myvm1
docker: '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 ls
NAME    ACTIVE   DRIVER   STATE     URL                     SWARM   DOCKER        ERRORS
myvm1   *        hyperv   Running   tcp://10.5.21.30:2376           v18.02.0-ce
myvm2   -        hyperv   Running   tcp://10.5.21.31:2376           v18.02.0-ce
docker-machine-env
docker-machine-env

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

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

代码语言:javascript
复制
docker stack deploy -c docker-compose.yml getstartedlab

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

代码语言:javascript
复制
docker stack ps getstartedlab
docker-swarm-deploy
docker-swarm-deploy

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

docker-swarm-hostname
docker-swarm-hostname

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

关闭应用和swarm

代码语言:javascript
复制
# 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

代码语言:javascript
复制
eval $(docker-machine env -u)

重启Docker Machine

代码语言:javascript
复制
> $ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
myvm1   -        virtualbox   Stopped                 Unknown
myvm2   -        virtualbox   Stopped                 Unknown

> $ docker-machine start myvm1
Starting "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 myvm2
Starting "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文件
代码语言:javascript
复制
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. 重启服务:
代码语言:javascript
复制
docker stack deploy -c docker-compose.yml getstartedlab
  1. 在浏览器中输入http://10.5.21.30:9000
docker-gui-portainer
docker-gui-portainer

参考链接

  • https://docs.docker.com/get-started/part4/#restarting-docker-machines
  • http://www.cnblogs.com/xishuai/p/docker-swarm.html
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
  • 创建一个集群
    • Mac,Linux,Window7和8虚拟主机安装
      • Windows 10虚拟主机安装
        • 虚拟主机列表以及IP
          • 初始化集群并且添加节点
            • 让你的shell直接和集群主机对话
              • Mac,Linux配置
              • Windows 10配置
            • 在集群主机上部署应用程序
              • 关闭应用和swarm
                • 离开集群主机shell
                  • 重启Docker Machine
                  • GUI图形界面管理
                  • 参考链接
                  相关产品与服务
                  容器镜像服务
                  容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档