声明:
本博客欢迎转发,但请保留原作者信息!
新浪微博:@Lingxian_kong;
博客地址:孔令贤的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!


安装docker-machine

我的安装环境是mac,之前在mac上安装有vagrant和virtualbox,所以我没有直接安装官方推荐的Docker Toolbox。其实我可以手动创建几台vagrant虚拟机,然后手动配置这三台虚拟机为一个swarm集群。但看了swarm官网的资料,都推荐使用docker-machine,之前不怎么熟悉,所以也借此机会熟悉一下,先在mac上安装docker-machine命令行工具。

因为mac不是linux,不支持直接创建容器,在mac下使用docker的架构图如下:

经过尝试,当使用docker-machine接管已有的virtualbox虚拟机时,会强制启用TLS,docker deamon的监听端口被改为2376,这里有个讨论。如果想手动配置swarm集群,不想配置TLS,就比较尴尬了。所以,最后我还是没有使用docker-machine配置swarm集群。下面仅是记录我尝试docker-machine的过程。

先安装docker-machine工具:

$ curl -L https://github.com/docker/machine/releases/download/v0.5.0/docker-machine_darwin-amd64.zip >machine.zip && \
unzip machine.zip && \
rm machine.zip
$ sudo mv docker-machine* /usr/local/bin/

查看docker-machine版本信息:

$ docker-machine -v
docker-machine version 0.5.0 (04cfa58)

因为之前在mac上已经装了virtualbox和vagrant,并且有一个vagrant虚拟机上安装了docker,所以这里仅仅是将这个名为’ubuntu’的虚拟机被docker-machine识别:

$ docker-machine create -d generic \
--generic-ssh-user vagrant \
--generic-ssh-key ~/vagrant/ubuntu/.vagrant/machines/default/virtualbox/private_key \
--generic-ip-address 192.168.33.12 \
ubuntu
Running pre-create checks...
Creating machine...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Provisioning created instance...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
To see how to connect Docker to this machine, run: docker-machine env ubuntu

注意,该命令会更改docker宿主机,即ubuntu虚拟机的一些配置,会重写/etc/default/docker,默认端口会改为2376,此外之前配置的Daocloud加速器(国内玩docker必备)也需要重新添加,参见https://dashboard.daocloud.io/mirror

配置成功后,查看docker-machine管理的docker主机

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
ubuntu * generic Running tcp://192.168.33.12:2376

如果后续不想这个虚拟机被docker-machine管理了,就使用docker-machine rm ubuntu命令从docker-machine中注销掉。

给mac安装docker命令行,这里使用homebrew安装,关于homebrew参见http://brew.sh/

$ rbrew install docker

导入环境变量,使后面的docker命令操作的docker主机指向这个ubuntu虚拟机,后续就可以在mac上直接执行docker命令:

$ eval "$(docker-machine env ubuntu)"
$ docker info
Containers: 2
Images: 58
Server Version: 1.9.0
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 62
Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-24-generic
Operating System: Ubuntu 14.04 LTS
CPUs: 1
Total Memory: 994.1 MiB
Name: ubuntu
ID: CV2F:GZUO:YJ33:5WCY:3IZG:4WA3:SIRE:PPSR:IRG7:4OUR:2HTS:WRNV
WARNING: No swap limit support
Labels:
provider=generic

安装docker-swarm

因为国内的网络原因,使用docker hub提供的token方式做服务发现很不稳定,最终我还是使用静态文件的方式。下面使用token的方式也仅仅是对过程做个记录。

以下使用Docker Hub提供的服务发现功能配置swarm集群,在ubuntu主机内执行:

$ docker pull swarm
$ docker run --rm swarm create
a3ec81af8d0d0690fcaf2ac95042f771

直接使用ubuntu docker主机作为swarm manager节点,同时也作为agent节点

$ docker run -d swarm join --addr=192.168.33.12:2375 token://a3ec81af8d0d0690fcaf2ac95042f771
$ docker run -d -p 2377:2375 swarm manage token://a3ec81af8d0d0690fcaf2ac95042f771
$ unset DOCKER_TLS_VERIFY (因为我们不使用TLS,因此需要修改这个环境变量)
$ docker -H tcp://0.0.0.0:2377 info (因为使用token的方式有问题,因此下面的nodes数是0)
Containers: 0
Images: 0
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 0
CPUs: 0
Total Memory: 0 B
Name: 63b845851a3b

增加swarm agent节点,因为网络原因,我使用docker-machine命令增加docker主机失败,所以还是手动创建了一个名为’swarmagent’的vagrant虚拟机并安装docker engine(参见https://docs.docker.com/engine/installation/ubuntulinux/)。

$ docker-machine create \
-d virtualbox \
--swarm \
--swarm-discovery token://a3ec81af8d0d0690fcaf2ac95042f771 \
swarm-agent-00
Running pre-create checks...
Creating machine...
Error creating machine: Error in driver during machine creation: Get https://api.github.com/repos/boot2docker/boot2docker/releases: dial tcp: i/o timeout

在swarmagent节点里,将-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock写入/etc/default/docker文件(别忘了配置Daocloud的加速器,下载swarm镜像时会很给力),加入swarm集群:

$ docker pull swarm
$ docker run -d swarm join --addr=192.168.33.13:2375 token://a3ec81af8d0d0690fcaf2ac95042f771

列出swarm集群节点:

$ docker run --rm swarm list token://a3ec81af8d0d0690fcaf2ac95042f771
192.168.33.12:2375
192.168.33.13:2375

但是通过swarm manager却查询不到节点信息,如下:

$ docker -H tcp://0.0.0.0:2377 info
Containers: 0
Images: 0
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 0
CPUs: 0
Total Memory: 0 B
Name: 63b845851a3b

使用静态文件做服务发现

因为不想再安装etcd/conul/zookeeper,所以就偷个懒,直接使用静态文件的方式做服务发现。swarm支持的几种服务发现方式可以参见这里

首先在ubuntu虚拟机里面新建一个文件,内容如下:

$ cat /opt/kong/docker_mount/swarm_hosts
192.168.33.12:2375
192.168.33.13:2375

接着创建swarm manager服务,注意这里的-v参数:

$ docker run -d -p 2377:2375 -v /opt/kong/docker_mount/swarm_hosts:/tmp/cluster swarm manage file:///tmp/cluster
c7e96ed127e2f23c757cac8e297ff869e3f0af96cb4cf778d90c2d353e750e40

查看swarm集群信息:

$ docker -H tcp://0.0.0.0:2377 info
Containers: 2
Images: 5
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 2
swarmagent: 192.168.33.13:2375
└ Status: Healthy
└ Containers: 0
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 514.6 MiB
└ Labels: executiondriver=native-0.2, kernelversion=3.13.0-24-generic, operatingsystem=Ubuntu 14.04 LTS, storagedriver=aufs
ubuntu: 192.168.33.12:2375
└ Status: Healthy
└ Containers: 2
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.019 GiB
└ Labels: executiondriver=native-0.2, kernelversion=3.13.0-24-generic, operatingsystem=Ubuntu 14.04 LTS, storagedriver=aufs
CPUs: 2
Total Memory: 1.522 GiB
Name: c7e96ed127e2

得了,总算了安装成功了。


参考文档:
swarm官方文档:https://docs.docker.com/swarm/

http://lingxiankong.github.io/2015-12-20-docker-swarm-in-mac.html

在mac上尝试docker-swarm的更多相关文章

  1. 002-docker安装-mac上安装docker,17.06在CentOS7 64位机器上安装

    一.mac上安装docker 1.下载 通过这个链接下载:https://download.docker.com/mac/stable/Docker.dmg 2.安装 将 Moby 的鲸鱼图标拖拽到  ...

  2. Mac上通过docker配置PHP开发环境

    这篇文章介绍的内容是关于Mac上通过docker配置PHP开发环境,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 更多PHP相关知识请关注我的专栏PHP​zhuanlan.zhihu. ...

  3. 云计算之路-阿里云上:docker swarm 问题最新进展

    今天中午我们在 docker swarm 集群上发布应用时遇到了一个奇怪的 docker swarm 内置负载均衡的问题,该应用的 2 个新容器成功启动后,在容器内访问正常,但通过服务名访问时一会正常 ...

  4. 云计算之路-阿里云上:docker swarm 集群故障与异常

    在上次遭遇 docker swarm 集群故障后,我们将 docker 由 17.10.0-ce 升级为最新稳定版 docker 17.12.0-ce . 前天晚上22:00之后集群中的2个节点突然出 ...

  5. 云计算之路-阿里云上:docker swarm 集群再次出现故障

    非常非常抱歉!16:30 ~ 17:00 左右我们用于跑 ASP.NET Core 站点的 docker swarm 集群再次出现宕机,由此给您带来了很大很大的麻烦,恳请您的谅解! 受此次故障影响的站 ...

  6. 在 Mac 上通过 Docker 运行 Asp.net Core 简易教程

    首先,你需要在 Mac 上安装好 Docker 下载地址 https://download.docker.com/mac/stable/Docker.dmg 或者查看别人的 安装教程 怎么安装这里就不 ...

  7. Mac上使用Docker Desktop启动Kubernetes,踩坑后终于搞掂

    1 前言 Kubernetes又简称k8s,是Google开源的容器集群管理系统,最近也是火热.闲来无事(为了发文),捣鼓了一下,在Mac上搭建Kubernetes,遇到一些坑,也记录一下. 另外,D ...

  8. 如何在mac上安装docker[记录自己在mac上安装docker的经历]

    0.引子 最近入手了一台mac笔记本,想在本地安装docker. 1.找安装文档. 文档地址:http://www.widuu.com/chinese_docker/installation/mac. ...

  9. 在mac上安装Docker

    1.进入一下地址进行下载docker https://download.docker.com/mac/stable/Docker.dmg 进入后进行下载后进行安装 2.将其拖动到Appliaction ...

随机推荐

  1. C++请求web service与xml解析

    1. C++解析XML的开源库 在项目中XML的解析使用的是开源的第三方库,TinyXML:这个解析库的模型通过XML文件,然后再内存中生成DOM模型,从而让我们能够非常方便的遍历这颗XML树. DO ...

  2. Notice: Undefined index: user in D:\phpStudy\WWW\js\ls\lsmc\php\add.php on line 9

    原文:Notice: Undefined index: user in D:\phpStudy\WWW\js\ls\lsmc\php\add.php on line 9 (初用数据库(mysql)做用 ...

  3. 网络故障模拟,cpu高压以及docker中的实现

    利用tc进行丢包 通过网络丢包来模拟网络故障,是测试中一个重要的测试项目.这对服务来说可以测试其在网络故障时的异常处理的能力,对于服务的可靠性是一个相当严苛的测试. 网卡名为$netcard,丢包率为 ...

  4. Android程序猿必掌握的sqlite数据库连表查询

    SQL查询的基本原理:两种情况介绍. 第一.   单表查询:依据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后依据SELECT的选择列选择对应的列进行返回终于结果. 第二 ...

  5. readline库的使用

    接口十分简单,readline和addhistory: #include <stdlib.h> #include <stdio.h> #include <unistd.h ...

  6. 分享一下Oracle 10g和Toad for Oracle的安装步骤

    三年前用过Oracle,单纯的“用过”,主要就是说对数据库的一些操作,还不包含创建一些存储过程之类的,所以对Oracle仅仅只是了解一点儿,因为当时那家公司里面,数据库里面的东西都是那些顾问负责的,再 ...

  7. eclise配置tomcat出现服务Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4 and Java EE 5 Web modules

    当部署项目Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, 1.5 and Java EE 5 Web modules错;解决方案,如下面: 空 ...

  8. C++该typeid和dynamic_cast

    1.typeid在没有虚拟函数的(不相关的动态绑定),typeid它只返回操作对象的实际类型 2.typeid涉及到动态联编问题时(使用基类指针p或者引用p操作派生类对象),typeid(p)返回基类 ...

  9. Shell脚本入门学习笔记

    1.shell操作系统和用户之间.负责解释命令行 2./etc/shells 记录登录系统有效支持shell 3./etc/passwd 最后,有人谁可以看到用户的默认shell 4.直接输入shel ...

  10. WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画

    原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同 ...