Docker Swarm 集群搭建

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

安装 Dockercurl-sSL https://get.daocloud.io/docker | sh

修改文件 /lib/systemd/system/docker.service,允许使用 TCP 连接 Docker

ExecStart=/usr/bin/dockerd-H unix:// -H tcp://0.0.0.0:2375

搭建自己的Gitlab

安装Gitlab

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

$ vim/etc/ssh/sshd_config

# 默认 Port 改为 2222

Port2222

# 重启服务

$ systemctl restart sshd.service

重新登录机器

ssh-p2222root@host

安装 Gitlab

sudo docker run-d--hostname gitlab.xxx.cn \

--publish443:443--publish80:80--publish22: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-runnerregister--clone-url http://内网ip/

Pleaseenter the gitlab-ci coordinator URL(e.g.https://gitlab.com/):

http://gitlab.xxx.cc/

Pleaseenter the gitlab-ci tokenforthisrunner:

xxxxx

Pleaseenter the gitlab-ci descriptionforthisrunner:

xxx

Pleaseenter the gitlab-ci tagsforthisrunner(comma separated):

builder

Pleaseenter the executor:docker-ssh,shell,docker+machine,docker-ssh+machine,docker,parallels,ssh,virtualbox,kubernetes:

shell

修改 gitlab-runner 并发执行个数$ vim/etc/gitlab-runner/config.toml

concurrent=5

初始化 Swarm 集群

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

$ docker swarm init

创建自定义 Overlay 网络

docker network create \

--driver overlay \

--subnet10.0.0.0/24\

--opt encrypted \

--attachable \

default-network

加入集群

# 显示manager节点的TOKEN

$ docker swarm join-token manager

# 加入manager节点到集群

$ docker swarm join--tokenip:2377

# 显示worker节点的TOKEN

$ docker swarm join-token worker

# 加入worker节点到集群

$ docker swarm join--tokenip:2377

然后配置发布用的 gitlab-runner

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

安装其他应用

以下以 Mysql 为例,直接使用上述 network,支持容器内使用 name 互调。

docker run--name mysql-v/srv/mysql:/var/lib/mysql-e MYSQL_ROOT_PASSWORD=xxxx-p3306:3306--rm--networkdefault-network-d mysql:5.7

安装 Portainerdocker service create \

--name portainer \

--publish9000: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/

安装 KONG 网关

通常情况下,Swarm集群是不会直接对外的,所以我们这里推荐使用 KONG 作为网关。还有另外一个原因,那就是 Swarm 的 Ingress网络 设计上有缺陷,所以在连接不复用的情况下,会有并发瓶颈,具体请查看对应 Issue #35082而 KONG 作为网关,默认情况下就会复用后端的连接,所以会极大减缓上述问题。

安装数据库docker run-d--name kong-database \

--network=default-network \

-p5432:5432\

-e"POSTGRES_USER=kong"\

-e"POSTGRES_DB=kong"\

postgres:9.6

安装网关

初始化数据库

docker run--rm \

--network=default-network \

-e"KONG_DATABASE=postgres"\

-e"KONG_PG_HOST=kong-database"\

-e"KONG_CASSANDRA_CONTACT_POINTS=kong-database"\

kong:latest kong migrations bootstrap

启动

docker run-d--name kong \

--network=default-network \

-e"KONG_DATABASE=postgres"\

-e"KONG_PG_HOST=kong-database"\

-e"KONG_CASSANDRA_CONTACT_POINTS=kong-database"\

-e"KONG_PROXY_ACCESS_LOG=/dev/stdout"\

-e"KONG_ADMIN_ACCESS_LOG=/dev/stdout"\

-e"KONG_PROXY_ERROR_LOG=/dev/stderr"\

-e"KONG_ADMIN_ERROR_LOG=/dev/stderr"\

-e"KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl"\

-p8000:8000\

-p8443:8443\

-p8001:8001\

-p8444:8444\

kong:latest

安装 KONG Dashboard暂时 Docker 中没有更新 v3.6.0 所以最新版的 KONG 可能无法使用

docker run--rm--network=default-network-p8080:8080-d--name kong-dashboard pgbi/kong-dashboard start \

--kong-url http://kong:8001 \

--basic-auth user1=password1 user2=password2

配置

接下来只需要把部署 KONG 的机器 IP 对外,然后配置 Service 即可。如果机器直接对外,最好只开放 80 443 端口,然后把 Kong 容器的 8000 和 8443 映射到 80 和 443 上。当然,如果使用了 SLB 等负载均衡,就直接通过负载均衡,把 80 和 443 映射到 KONG 所在几台机器的 8000 8443 上。

如何使用 Linux Crontab

Hyperf 虽然提供了 crontab 组件,但是不一定可以满足所有人的需求,这里提供一个 Linux 使用的脚本,执行 Docker 内的 Command。

#!/usr/bin/env bash

basepath=$(cd`dirname $0`;pwd)

docker pull registry-vpc.cn-shanghai.aliyuncs.com/namespace/project:latest

docker run--rm-i-v $basepath/.env:/opt/www/.env \

--entrypoint php registry-vpc.cn-shanghai.aliyuncs.com/namespace/project:latest \

/opt/www/bin/hyperf.php your_command

意外情况

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

正式环境docker部署hyperf_应用部署 - Docker Swarm 集群搭建 - 《Hyperf v1.1.1 开发文档》 - 书栈网 · BookStack...相关推荐

  1. Swarm集群搭建( docker安装、docker-compose安装、portainer可视化安装、基本使用命令总结、项目集群部署案例)

    docker安装.docker-compose安装.Swarm集群搭建.portainer可视化安装.和项目部署案例 四台服务器,我这里选用四台虚拟机1核2G,系统centos7,ip:192.168 ...

  2. 【Docker之Swarm详细讲解Swarm集群搭建管理节点工作节点Raft一致性协议overlay网络Docker结合Swarm部署WordPress个人博客实战】

    一.知识回顾 之前的内容都帮你整理好了,在这里哟! [0.Docker相关目录文章整理,可自行查看,包含多节内容] [1.Docker详细安装部署&阿里镜像地址配置] [2.Docker架构& ...

  3. Docker Swarm集群搭建以及服务命令等操作

    前言:之前都是采用rancher可视化管理工具进行管理K8S进一步管理容器,但是每次机器宕机后rancher中集群特别容易挂掉,出现的问题五花八门,在网上很难搜到解决方案,所以准备采用docker官方 ...

  4. Docker Swarm集群搭建

    Docker Swarm提供Docker容器集群服务,可以将多个Docker主机封装为单个单行的虚拟Docker主机,快速打造一套容器云平台. DockerSwarm提供很多新特性,如 具有容错能力的 ...

  5. Docker swarm 集群搭建

    Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Docker API接口作 ...

  6. docker学习------centos7.5下的swarm集群可视化构建

    1.swarm集群 manager : 192.168.211.175 agent1    : 192.168.211.176    agent2    :  192.168.211.177 2.环境 ...

  7. Docker swarm集群搭建教程

    一.什么是Swarm Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行为.比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavio ...

  8. docker swarm集群搭建及使用Portainer、shipyard

    一.规划 1.swarm01作为manager节点,swarm02和swarm03作为worker节点. # cat /etc/hosts 127.0.0.1 localhost 192.168.13 ...

  9. 持续集成docker—第三篇(docker swarm集群搭建)

    一.规划 1.net-master作为manager节点,net-salve作为worker节点. cat >>/etc/hosts<<EOF 47.96.65.70 yund ...

最新文章

  1. AppsFlyer将API网关服务从Clojure迁移到Golang
  2. stringstream精度问题
  3. Python实现文本自动分类(朴素贝叶斯方法)
  4. MySQL-性能优化_大表和大事务的常用处理方案
  5. Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包
  6. 【算法基础】数据结构导论第五章-图.pptx
  7. android 仿人人网滑动侧边栏
  8. 怎么使用socket在云服务上通信步骤(可支持TCP或UDP)
  9. 微信小程序 - 回到自己位置(map)
  10. 带你通俗理解https
  11. 给blog 增加文件下载统计
  12. python详细安装教程-超详细Python与PyCharm安装教程,看这一篇就够了
  13. web app iphone4 iphone5 iphone6 iphone6 Plus响应式布局 适配代码
  14. Spring之Bean配置
  15. vs2015-devexpress 安装
  16. 牛客网 - 编程初学者入门训练 - 分支控制(BC50~BC77)
  17. mkv格式用什么播放器打开?视频转换器怎样操作
  18. android 禁止其他应用开机启动项,禁止各种APP开机后自动运行的方案
  19. 火狐浏览器设置默认缩放比例
  20. asp毕业设计——基于asp+access的车辆调度管理系统设计与实现(毕业论文+程序源码)——车辆调度管理系统

热门文章

  1. Linux的文件权限
  2. WinInet, WinHttp, Winsock, ws2_32的基本解释
  3. hdu 1075 (字典树映射)
  4. 网关技术选型,为什么选择 Openresty ?事件驱动、协程...
  5. 如何计算服务限流的配额
  6. 云原生时代,Java还有优势么?
  7. Redis 很屌,不懂使用规范就糟蹋了
  8. (万字长文)Spring的核心知识尽揽其中
  9. 开发者们的迷茫期,该怎么看破?
  10. 看完这部缓存进化史,还不懂缓存,请给我差评