资讯专栏INFORMATION COLUMN

Docker Swarm集群搭建教程

endless_road / 1075人阅读

摘要:现阶段,容器技术已经相当成熟,就算是中小型公司也可以基于镜像服务轻松搭建自己的集群服务。线上环境可以设置为,测试环境设置为安装创建一个项目登录创建一个项目。接下来我们就可以访问集群任意一台机器的端口。

现阶段,Docker容器技术已经相当成熟,就算是中小型公司也可以基于 Gitlab、Aliyun镜像服务、Docker Swarm 轻松搭建自己的 Docker集群服务。

安装 Docker
curl -sSL https://get.daocloud.io/docker | sh
搭建自己的Gitlab 安装Gitlab

首先我们修改一下端口号,把 sshd 服务的 22 端口改为 2222,让 gitlab 可以使用 22 端口。

$ vim /etc/ssh/sshd_config

# 默认 Port 改为 2222
Port 2222

# 重启服务
$ systemctl restart sshd.service

重新登录机器

ssh -p 2222 root@host 

安装 Gitlab

sudo docker run -d --hostname gitlab.xxx.cn 
--publish 443:443 --publish 80:80 --publish 22:22 
--name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab 
--volume /srv/gitlab/logs:/var/log/gitlab 
--volume /srv/gitlab/data:/var/opt/gitlab 
gitlab/gitlab-ce:latest

首次登录 Gitlab 会重置密码,用户名是 root

安装gitlab-runner

官方地址

CentOS 为例

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install gitlab-runner

当然,可以用 curl https://setup.ius.io | sh 命令,更新为最新的 git 源,然后直接使用 yum 安装 git 和 gitlab-runner。

$ curl https://setup.ius.io | sh
$ yum -y install git2u
$ git version
$ yum install gitlab-runner
注册 gitlab-runner
$ gitlab-runner register --clone-url http://内网ip/

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab.xxx.cc/
Please enter the gitlab-ci token for this runner:
xxxxx
Please enter the gitlab-ci description for this runner:
xxx
Please enter the gitlab-ci tags for this runner (comma separated):
builder
Please enter the executor: docker-ssh, shell, docker+machine, docker-ssh+machine, docker, parallels, ssh, virtualbox, kubernetes:
shell
初始化 Swarm 集群

登录另外一台机器,初始化集群

$ docker swarm init

创建自定义 Overlay 网络

docker network create 
--driver overlay 
--subnet 10.0.0.0/24 
--opt encrypted 
default-network

加入集群

# 显示manager节点的TOKEN
$ docker swarm join-token manager
# 加入manager节点到集群
$ docker swarm join --token  ip:2377

# 显示worker节点的TOKEN
$ docker swarm join-token worker
# 加入worker节点到集群
$ docker swarm join --token  ip:2377

然后配置发布用的 gitlab-runner

其他与 builder 一致,但是 tag 却不能一样。线上环境可以设置为 tags,测试环境设置为 test
安装 Portainer

Portainer

docker service create 
    --name portainer 
    --publish 9000:9000 
    --replicas=1 
    --constraint "node.role == manager" 
    --mount type=volume,src=portainer_data,dst=/data 
    --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock 
    portainer/portainer
创建一个Demo项目

登录 Gitlab 创建一个 Demo 项目。并导入我们的项目 hyperf-skeleton

配置镜像仓库
我们直接使用阿里云的即可

首先创建一个命名空间 test_namespace,然后创建一个镜像仓库 demo,并使用本地仓库。

然后到我们直接打包用的服务器中,登录阿里云 Docker Registry

usermod -aG docker gitlab-runner
su gitlab-runner
docker login --username=your_name registry.cn-shanghai.aliyuncs.com

修改我们项目里的 .gitlab-ci.yml

variables:
  PROJECT_NAME: demo
  REGISTRY_URL: registry.cn-shanghai.aliyuncs.com/test_namespace

还有 deploy.test.yml,需要仔细对比以下文件哦。

version: "3.7"
services:
  demo:
    image: $REGISTRY_URL/$PROJECT_NAME:test
    environment:
      - "APP_PROJECT=demo"
      - "APP_ENV=test"
    ports:
      - 9501:9501
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 5
      update_config:
        parallelism: 2
        delay: 5s
        order: start-first
    networks:
      - default-network
    configs:
      - source: demo_v1.0
        target: /opt/www/.env
configs:
  demo_v1.0:
    external: true
networks:
  default-network:
    external: true

然后在我们的 portainer 中,创建对应的 Config demo_v1.0。当然,以下参数需要根据实际情况调整,因为我们的Demo中,没有任何IO操作,所以填默认的即可。

APP_NAME=demo

DB_DRIVER=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=hyperf
DB_USERNAME=root
DB_PASSWORD=
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
DB_PREFIX=

REDIS_HOST=localhost
REDIS_AUTH=
REDIS_PORT=6379
REDIS_DB=0

因为我们配置的 gitlab-ci.yml 会检测 test 分支和 tags,所以我们把修改的内容合并到test分支,然后推到gitlab上。

接下来我们就可以访问集群任意一台机器的 9501 端口。进行测试了

curl http://127.0.0.1:9501/
意外情况 fatal: git fetch-pack: expected shallow list

这种情况是 gitlab-runner 使用的 git 版本过低,更新 git 版本即可。

$ curl https://setup.ius.io | sh
$ yum remove -y git
$ yum -y install git2u
$ git version

# 重新安装 gitlab-runner 并重新注册 gitlab-runner
$ yum install gitlab-runner

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31834.html

相关文章

  • 生产环境中使用Docker Swarm的一些建议

    摘要:译者按实践中会发现,生产环境中使用单个节点是远远不够的,搭建集群势在必行。集群的网络通信服务发现,负载均衡以及容器间通信非常可靠。负载均衡也是由提供的。 译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行。然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它们之中,Swarm是Docker原...

    loonggg 评论0 收藏0
  • Docker Swarm的前世今生

    摘要:当然此时的局限性较大,比如没有副本和负载均衡的概念,这导致服务无法高可用当然也更不存在什么服务网络管理和跨节点数据存储这些东西没有服务模型集群中服务间关系和启动顺序编排也很复杂于是就有了下面的的诞生。 showImg(https://segmentfault.com/img/remote/1460000015317037?w=1885&h=1153); 概述 在我的《Docker S...

    lemon 评论0 收藏0
  • Docker Swarm集群初探

    摘要:既然要组集群那就涉及诸如的资源调度管理等等一系列问题。目前涉及集群的三个主要的技术无外乎三种。从本文开始作者将会一一实践这几种主要的集群技术,话不多说,现在开始。完全运行于内存中,体积小,启动快。 showImg(https://segmentfault.com/img/remote/1460000015723680); 前言 相信Docker技术大家都有所了解,单个Docker能发...

    MingjunYang 评论0 收藏0
  • docker 1.12 的服务自动发现

    摘要:介绍的集群的自动发现有两种方式与本文使用的是的方式准备安装以上版本初始化集群创建一个名为的网络开放端口初始化集群部份可看我之前的博客使用搭建多主机集群创建网络查看当前的网络也是一个网络可以跨主机通信本教程会创建一个新的创建网络 介绍 docker 1.12 的swarm 集群的自动发现有两种方式, virtual IP address (VIP) 与 DNS round-robin, ...

    ygyooo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<