(一)节点的创建和配置

前言

 虽然工作中一直在用Docker和Docker Swarm,但是总感觉有点陌生,总想自己亲手来写写和配置Docker 容器相关的事情,这篇文章主要是参考了Los Techies 中关于Docker 和 Docker Swarm 的一些内容,然后自己做一个尝试和练习。

 本文主要讲的就是使用VirtualBox 来建立 Docker node ,然后组合成 Docker Swarm。

环境配置

因为之前一直是在Linux的环境下操作的,这次是想在家里的Windows上用Docker来试试的。由于Hyper-V啦,Virtualization等各类问题,也可能是对Docker 的不熟悉,折腾了两个晚上之后放弃了,最后决定在Mac上进行操作。

Docker 及其版本:

  1. Docker:Docker version 17.12.0-ce, build c97c6d6
  2. Docker-machine: docker-machine version 0.13.0, build 9ba6da9
  3. Docker-compose:docker-compose version 1.18.0, build 8dd22a9

然后还需要安装Virtualbox 来模拟多个服务器,根据自己机器的环境安装对应的版本。

创建节点

for N in 1 2 3 4 5;
do docker-machine create --driver virtualbox node$N;
done

可能需要花费一点时间,然后使用

docker-machine ls

接下来就会看到下面的这张图。

如果我们要进入某个node,则需要执行docker-machine ssh node1

之前一直卡在docker-compose上面,因为我在Windows上一直无法安装,使用docker pull docker/compose:1.8.0 没想到这个坑,这个是之前的,目前只要安装好docker 的Mac 或者Windows客户端就自动安装好了 docker-machine 和docke-compose

开始Swarmkit

 做好上面的准备之后,我们已经可以开始创建Docker Swarm 了,Docker ,理解Swarm clusters:

A swarm is a group of machines that are running Docker and joined into a cluster.. After that has happened, you continue to run the Docker commands you’re used to, but now they are executed on a cluster by a swarm manager. The machines in a swarm can be physical or virtual. After joining a swarm, they are referred to as nodes.

接下来我们就创建一个Swarm,

  1. 首先进行node1 docker-machine ssh node1

  2. 执行 docker swarm init --advertise-addr [node1-ip-address] 比如我的node1 的ip地址是192.168.99.100,则命令为 docker swarm init --advertise-addr 192.168.99.100 执行完之后就会看到控制台:

    $ docker swarm init --advertise-addr 192.168.99.100
    Swarm initialized: current node (ddec2zwjaes2kpkmnshkmpstq) is now a manager. To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-4kxfjieyyjdab91c9sxunj75ivke51y4geoucu7g4cvl7g2p1u-7m00eooi3obknk2cjx8zexkea 192.168.99.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
  3. 执行完这个命令后,node1 就成为了leader,你可以依次进入每个容器然后执行 docker swarm join --token SWMTKN-1-4kxfjieyyjdab91c9sxunj75ivke51y4geoucu7g4cvl7g2p1u-7m00eooi3obknk2cjx8zexkea 192.168.99.100:2377 加入到Swarm中。

  4. 执行完上述命令后,则我们有一个5个node 的Swarm了。一个node1 leader 节点,然后4个worker 节点。

    In a production environment we should have at least 3 master nodes for high availability since master nodes store all the information about the swarm and its state.

  5. 我们可以通过 docker node promote node2 node3 来把worker 节点提升为leader节点

关于这个Reachable是什么意思呢?当我们现在的node2 节点由于某种原因挂了,或者停止了,那么在node1和node3中就会自动选择一个当作leader,然后等node2恢复后,就变成了Reachable状态了。

Service

 有了上面关于的那些基础设施后,接下来可以了解Service了,在了解早起爱你,我们先来说说Node,个人感觉node就像一台服务器一样,然后加入到Swarm里面,一堆的node然后就可以组建成一个Swarm。

A node is an instance of Docker Engine participating in a swarm.

在Swarm里面,node 有两种形式,一种是 worker,另一种是manager。woker的权限就少的有点可怜了,连docker service ls 都看不了。

 说起Service服务,首先它是跑在node上面的,我觉得吧它就像比如一个应用,比如登陆站点服务。

A service is the definition of the tasks to execute on the worker nodes. It is the central structure of the swarm system and the primary root of user interaction with the swarm.

Services are really just “containers in production.” A service only runs one image, but it codifies the way that image runs—what ports it should use, how many replicas of the container should run so the service has the capacity it needs, and so on. Scaling a service changes the number of container instances running that piece of software, assigning more computing resources to the service in the process.

使用 docker-compose.yml 来定义,运行和配置服务

docker rmi $(docker images -q -f dangling=true)

Docker使用过程中的一些命令

docker ps / docker container ls 查看当前容器列表

docker image ls / docker images 查看当前镜像列表

docker build -t imageName . 建立镜像命令

docker run -p 4000:80 imageName 运行容器命令

docker run -d -p 4000:80 imageName 后台运行容器命令

docker container stop containerId 停止容器命令

docker swarm init 初始化swarm

docker stack deploy -c docker-compose.yml appName 建立名为appName 的App Stack,若调整了docker-compose.yml ,也可用该命令进行站点的更新

docker service ls 查看当前运行的服务的信息

docker service ps servicename 列出当前服务所运行的节点及其状态

docker stack rm appName 下线名为appName 的app

docker swarm leave --force 离开Swarm

docker-machine ls 列出当前的虚拟机信息

docker-machine ssh machine_name 进入名为 machine_name 的虚拟机中,如果无法进行,则使用docker-machine --native-ssh ssh machine_name

docker node ls 查看当前Swarm的节点信息,需要在Swarm 中执行该命令,否则报错

这两个命令和起来很有用,相当于附加到当前的Shell控制台上,可以不进入虚拟机,然后直接操作该虚拟机。

docker-machine env <machine>

eval $(docker-machine env <machine>)

get the command to configure your shell to talk to <machine>.

eval $(docker-machine env -u) 取消绑定

当镜像是存储在私人Registry上时,这需要 login 然后deploy时加上--with-registry-auth 命令

docker login registry.example.com

docker stack deploy --with-registry-auth -c docker-compose.yml appName

Docker And Swarm Mode(一)的更多相关文章

  1. 小白学Docker之Swarm

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

  2. 【Docker】 Swarm简单介绍

    [Swarm] Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源.Swarm ...

  3. Docker - 使用 swarm 部署 services

    前言 经过之前一段时间学习与思考,我们已经大概明确了一些感念: Docker image/container,  service and node 简单来说,swarm允许我们以节点(node)的方式 ...

  4. Docker - 创建Swarm

    1. 准备 我们需要: Docker Engine 1.12 or later installed the IP address of the manager machine open ports b ...

  5. docker学习------swarm集群虚机异常关机,node状态为down

    1.因昨天虚机异常关闭,导致今天上去查看时,node节点状态显示为down 2.查了些相关资料,找到处理办法(因我的节点没有任何数据,所以直接对其进行清除) docker swarm leave -- ...

  6. docker kubernetes Swarm容器编排k8s CICD部署

    1docker版本 docker 17.09 https://docs.docker.com/ appledeAir:~ apple$ docker version Client: Docker En ...

  7. Docker之Swarm

    Docker学习笔记 — Swarm搭建Docker集群 Swarm在schedule节点运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, ...

  8. Docker: 如何将node.js的项目部署到docker的swarm上面去

    前提条件: Docker创建虚机和swarm 如何用Docker建立一个Node.js的开发环境 正文: 将如何用Docker建立一个Node.js的开发环境文中创建的nodehello image发 ...

  9. docker探索-swarm搭建docker集群(七)

    前言 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令,docker s ...

随机推荐

  1. [转]C++ 初始化列表的初始化顺序

    构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序.成员被初始化的次序就是定义成员的次序.第一个被定义的成员先被初始化,依次类推.一般,初始化的顺序无关紧要,然而,如果一个成员是根据 ...

  2. C#/AutoCAD 2018/ObjectArx/二次开发添加删除实体的工具函数(四)

    1.添加删除实体 C# ObjectARX二次开发添加删除实体是非常容易主要代码如下: 添加实体: objId = btr.AppendEntity(entity); trans.AddNewlyCr ...

  3. 2017-2018-1 20155306 mypwd的实现

    2017-2018-1 20155306 mypwd的实现 一.pwd的使用 功能: Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 命令格式:pwd [选项] 命 ...

  4. scrapy 模拟登陆

    import scrapy import urllib.request from scrapy.http import Request,FormRequest class LoginspdSpider ...

  5. xapp1151_Param_CAM模块安装

    xapp1151_Param_CAM模块安装 所需生成模块 TCAM CAM 下载链接 赛灵思技术支持网站:http://www.xilinx.com/support.html 并在网页中搜索xapp ...

  6. 使用 VSCode 编写 .NET Core 项目之初体验

    注:本文在根据 微软官方文档指导下,根据自己的学习中整理,并不完全照搬文档,但也大体和文档学习路线相似,主要为记录学习过程. 官方学习地址: https://code.visualstudio.com ...

  7. js window

    window对象: browser object mode :bom对象. bom提供了独立于内容而与浏览器窗口进行交互的对象. bom主要用于管理窗口与窗口之间的通讯,因此其核心对象是window ...

  8. CentOS 7 使用yum安装出现错误

    CentOS 7 使用yum安装软件出现错误: Loaded plugins: fastestmirror 此错误信息可能是因为DNS配置错误,可以通过更改配置文件来解决: 1. 使用vi打开DNS的 ...

  9. @SpringBootApplication 组合注解包含哪些注解及作用

    序:在学习springboot,教程一般对一些注解语焉不详,发现@SpringBootApplication 这个注解包含了很多注解,也就是说使用这个注解可以少写几个注解,这里看源码粘出来一些,仅用于 ...

  10. SpringCloud的Hystrix(二) 某消费者应用(如:ui、网关)访问的多个微服务的断路监控

    一.验证断路保护监控是否管理多个消费者 app 1.第1个消费者应用:访问自己封装rest服务 saleProd 2.第2个消费者应用:第二个应用没有反应 说明 1.每个应用实例的断路保护机制,只对本 ...