Docker Swarm集群搭建教程

现阶段,Docker容器技术已经至关成熟,就算是中小型公司也能够基于 Gitlab、Aliyun镜像服务、Docker Swarm 轻松搭建本身的 Docker集群服务。html

安装 Docker

curl -sSL https://get.daocloud.io/docker | sh
复制代码

搭建本身的Gitlab

安装Gitlab

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

$ vim /etc/ssh/sshd_config

# 默认 Port 改成 2222
Port 2222

# 重启服务
$ systemctl restart sshd.service
复制代码

从新登陆机器mysql

ssh -p 2222 root@host 
复制代码

安装 Gitlablinux

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 会重置密码,用户名是 rootgit

安装gitlab-runner

官方地址github

CentOS 为例sql

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。docker

$ 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 集群

登陆另一台机器,初始化集群shell

$ docker swarm init
复制代码

建立自定义 Overlay 网络vim

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 <token> ip:2377

# 显示worker节点的TOKEN
$ docker swarm join-token worker
# 加入worker节点到集群
$ docker swarm join --token <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
复制代码

若是本文档对你有什么帮助,就请我喝杯咖啡如何

相关文章
相关标签/搜索