• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >虚拟化 > 详解基于docker-swarm搭建持续集成集群服务

详解基于docker-swarm搭建持续集成集群服务

作者:马猴烧酒啊虾虾虾 字体:[增加 减小] 来源:互联网

本文主要包含docker,swarm,集成集群服务,docker,swarm集群等服务器相关知识,马猴烧酒啊虾虾虾 希望可以进行参考

前言

本文只为自己搭建过程中的一些简单的记录。如果实践中有疑问,可以一起探讨。

为了能在本机(macOS)模拟集群环境,使用了vb和docker-machine。整体持续集成的几个机器设施如下:

1、服务节点:三个manager节点,一个worker节点。manager需要占用更多的资源,manager配置尽量高一些。swarm的manager节点的容错率是 (N-1)/2 。N是manager节点数。也就是如果有3个manager,那就能容忍一个manager节点挂掉。官方的算法说明:Raft consensus in swarm mode。

2、本地的镜像仓库 registry:用来存储所有需要部署的服务docker镜像。

https://docs.docker.com/registry/deploying/

因为使用swarm机制,所以不需要在服务间通信问题考虑服务发现以及负载均衡的问题(代替原有的consul®istor方式)。

3、构建镜像的运维节点 ops:

也即运维机器。一个独立的节点即可。主要负责build镜像,push镜像。在ops里可以构建gitlab的私库。维护构建脚本。机器所需配置不高,对网络宽带还是尽量多一些。

用docker-machine 模拟集群环境

创建registry节点

docker-machine create -d virtualbox --virtualbox-memory "512" registry 

–engine-registry-mirror 这个参数是可以设置一些加速仓库的地址。

创建manager,worker节点

manager

worker:

docker-machine create -d virtualbox --virtualbox-memory "800" worker1 
docker-machine create -d virtualbox --virtualbox-memory "800" worker2 
docker-machine create -d virtualbox --virtualbox-memory "800" worker3 

创建ops 节点

docker-machine create -d virtualbox --virtualbox-memory "512" ops 

查看机器列表状态

docker-machine ls 

创建registry服务

登录到registry机器上。

docker-machine ssh registry

创建一个registry服务。

docker run -d -p 5000:5000 --restart=always --name registry \
 -v `pwd`/data:/var/lib/registry \
 registry:2

命令设置了-v volumn选项,这样在每次容器服务重启的时候,不会丢失已经pull的镜像数据。registry,mysql等存储类型的容器,建议设置一下volumn.如果为了更好的扩展,也可以将镜像仓库备份到其他driver里,如阿里云的OSS.

运行docker ps就可以看到一个启动好的registry服务。当然,为了更好的扩展,也可以挂载在自己的域名下,重新run 的时候添加认证信息。

为了更方便管理容器,可以使用docker-compose 组件。安装:

也可以写好compose文件之后直接启动:

docker-compose up -d

本地仓库push镜像

现在可以尝试拉一个镜像,然后tag到本地的registry仓库,如

然后再执行push 命令:

docker push localhost:5000/see:1.0.3

这个镜像就push到了registry服务中,最直接的方式可以通过查看本地的volumn目录,如本例中的 data目录查看到镜像数据。
如果为了更方便的可视化管理registry,也可以试用下registry UI 相关的镜像如hyper/docker-registry-web。

然后访问 hostname:5000/registory/index可以看到简单的镜像列表UI。

https 问题

在本地测试时如果执行以上步骤,在push,或者在其他vb中pull镜像时遇到以下问题:

Error response from daemon: Get https://registry:5000/v1/_ping: dial tcp 218.205.57.154:5000: i/o timeout

处理方式是,修改registry的认证,如下先修改“/var/lib/boot2docker/profile”:

sudo vi /var/lib/boot2docker/profile

添加

DOCKER_OPTS="--insecure-registry <host-name>:5000"
DOCKER_OPTS="--insecure-registry registry:5000"

因为registry的hostname就是 registry。所以执行docker ifno命令可以看到:

Insecure Registries:
 registry:5000
 127.0.0.0/8 

同时,在其他的worker机器,manager机器也需要修改–insecure-registry属性,才可以pull私库的镜像。修改之后需重新restart vb。

重启后,在manager重新尝试pull

docker pull registry:5000/see:1.0.3 

 可以看到成功连接仓库并拉取镜像。注意,本示例使用的是机器名,registry,而不是IP地址。所以,在拉取镜像的时候,需在各自的vb 的etc/hosts文件配置ip和机器名的映射。用机器名的方式比较操作易记。当然最好的方式还是通过域名访问仓库。

参考资源

部署registry服务

创建ops服务

swarm的服务集群会直接从registry上pull镜像,直接启动应用的service服务。服务的镜像直接打在registry仓库中,但是源码可以维护在ops机器上。前面创建的ops的virtual-box,可以部署gitlab服务。启动参数可以参考Deploy GitLab Docker images

先pull一个gitlab镜像

docker run --detach \
 --hostname gitlab.lijingyao.com \
 --publish 443:443 --publish 80:80 --publish 22:22 \
 --name gitlab \
 --restart always \
 --volume `pwd`/gitlab/config:/etc/gitlab \
 --volume `pwd`/gitlab/logs:/var/log/gitlab \
 --volume `pwd`/gitlab/data:/var/opt/gitlab \
 gitlab/gitlab-ce:8.14.4-ce.0

使用git私库

因绑定了80端口,启动gitlab后访问:http://machine-host/

第一次进入gitlab会自动跳转到重置密码。可以设置一个新的密码,这个是root账号的密码。后续就可以注册其他git用户使用了。
这里,如果申请了域名服务,或者本地绑定gitlab.lijingyao.com 到这个virtualbox的ip地址,就可以直接访问gitlab.lijingyao.com地址。在实际生产环境有固定公网ip,自己的dns服务,就不需要绑定host。这里只是本地测试,所以暂时就通过绑定host的方式。

swarm

本例中的服务是一个简单的springboot 和gradle的工程,服务镜像可以在docker hub pull,see service image。打包好镜像后,直接在gradle task中push到registry仓库中。在本地环境可以直接在工程目录里执行。gradle task然后push到vb的registry中,再在registry 仓库pull镜像即可。现在开始准备初始化swarm 集群。

现在整个vb 集群的机器,查看如下:

$docker-machine ls

NAME  ACTIVE DRIVER  STATE  URL       SWARM DOCKER ERRORS
haproxy -  virtualbox Running tcp://192.168.99.103:2376   v1.12.3 
manager1 -  virtualbox Running tcp://192.168.99.100:2376   v1.12.3 
ops  -  virtualbox Running tcp://192.168.99.106:2376   v1.12.3 
registry -  virtualbox Running tcp://192.168.99.107:2376   v1.12.3 
worker1 -  virtualbox Running tcp://192.168.99.101:2376   v1.12.3 
worker2 -  virtualbox Running tcp://192.168.99.102:2376   v1.12.3 
worker3 -  virtualbox Running tcp://192.168.99.105:2376   v1.12.3 

然后用docker-machine ssh manager1登陆到manager1机器上。

初始化swarm manager节点

在manager1 机器上初始化swarm,这个初始化的机器就是swarm的manager.执行:

 docker swarm init --advertise-addr 192.168.99.100

会看到以下执行输出:

Swarm initialized: current node (03x5vnxmk2gc43i0d7xpycvjg) is now a manager.

To add a worker to this swarm, run the following command:

 docker swarm join \
 --token SWMTKN-1-5ru6lyco3upj7oje6hidug3erqczok84wk7bekzfaca4uv51r9-22bcjhkbxnclmw3nl3ui8601l \
 192.168.99.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

这个生成的token值,是其他swarm集群节点join到整个swarm的key。如果忘记了token,可以在manager1上执行:

$docker swarm join-token manager 

来查看目前的token值。官方建议至少6个月更换以下token。更换命令:

$docker swarm join-token --rotate worker 

添加worker节点

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Docker实践8:Compose,docker实践compose
  • Docker buildx构建多平台镜像并推送到私有仓库的方法
  • Docker三个基本概念镜像(Image)容器(Container)仓库(Repository)
  • 什么是Docker?为什么要使用Docker
  • docker 开源的应用容器引擎
  • 如何给docker设置http代理
  • docker官方mysql镜像自定义配置详解
  • 详解Docker数据管理(数据卷&数据卷容器)
  • 如何利用Docker容器实现代理转发与数据备份详解
  • 详解Docker Swarm 在持续集成测试中的应用

相关文章

  • 蘑菇街 私有云Docker实例应用
  • VMware Workstation Pro12安装RedHat6.4 64位教程
  • 使用Docker安装phabricator的配置和使用方法
  • Docker 手动配置容器网络实例详解
  • VMwarea虚拟机安装win7操作系统的教程图解
  • CloudStack SSVM启动条件源码阅读与问题解决方法
  • 简单谈谈Docker镜像的使用方法
  • Docker Swarm入门实例详解
  • XenServer6.0中虚拟机设置自动启动的方法
  • ubuntu17.10安装docker-ce的方法

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • Linux学习之CentOS(一)----在VMware虚拟机中安装CentOS 7(图文教程)
    • docker下修改mysql配置文件的方法
    • 使用VMware10安装Ubuntu 14步骤图文详解
    • 详解如何修改docker pull镜像源
    • Docker基础知识之Linux namespace图文详解
    • CloudStack 创建主存储失败解决方案
    • 服务器虚拟化需要先考虑存储问题
    • 解析IBM虚拟化技术原理 探索测试快速化道路(1)
    • XenServer 日志清理方法详细介绍
    • Docker容器访问宿主机网络的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有