现阶段Docker容器技术已经相当成熟,即使是中小型企业也可以轻松基于Gitlab、阿里云镜像服务、DockerSwarm搭建自己的Docker集群服务。安装Dockercurl-sSLhttps://get.daocloud.io/docker|sh搭建自己的Gitlab安装Gitlab首先我们修改端口号,把sshd服务的22端口改成2222,这样gitlab就可以使用22端口了。$vim/etc/ssh/sshd_config#把默认端口改成2222端口2222#重启服务$systemctlrestartsshd.service重新登录机器ssh-p2222root@host安装Gitlabsudodockerrun-d--hostnamegitlab.xxx.cn\---publish443:443--publish80:80--publish22:22\--namegitlab--restartalways--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-Lhttps://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh|sudobashyuminstallgitlab-runner当然可以用curlhttps://setup.ius.io|sh命令,更新到最新的git源,然后直接使用yum安装git和gitlab-runner。$curlhttps://setup.ius.io|sh$yum-yinstallgit2u$gitversion$yuminstallgitlab-runnerregistergitlab-runner$gitlab-runnerregister--clone-urlhttp://intranetip/请输入gitlab-cicoordinatorURL(e.g.https://gitlab.com/):http://gitlab.xxx.cc/请输入此runner的gitlab-citoken:xxxxx请输入此runner的gitlab-ci描述:xxx请输入此runner的gitlab-ci标签(commaseparated):builderPleaseentertheexecutor:docker-ssh,shell,docker+machine,docker-ssh+machine,docker,parallels,ssh,virtualbox,kubernetes:shellinitializationSwarm集群登录到另一台机器,初始化集群$dockerswarminitcreatesacustomOverlaynetworkdockernetworkcreate\--driveroverlay\--subnet10.0.0.0/24\--optencrypted\default-network加入集群#DisplaymanagerNode'sTOKEN$dockerswarmjoin-tokenmanager#将manager节点加入集群$dockerswarmjoin--tokenip:2377#显示worker节点的TOKEN$dockerswarmjoin-tokenworker#将工作节点加入集群$dockerswarmjoin--tokenip:2377然后配置用于发布的gitlab-runner。其他的和builder是一致的,只是tag不一样。线上环境可以设置为tags,测试环境可以设置为test。安装PortainerPortainerdockerservicecreate\--nameportainer\--publish9000:9000\--replicas=1\--constraint'node.role==manager'\--mounttype=volume,src=portainer_data,dst=/data\--mounttype=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock\portainer/portainer创建Demo工程登录Gitlab创建Demo工程。并导入我们的项目hyperf-skeleton配置镜像仓库。我们可以直接使用阿里云先创建命名空间test_namespace,然后创建镜像仓库demo,使用本地仓库。然后到我们直接打包使用的服务器登录阿里云DockerRegistryusermod-aGdockergitlab-runnersugitlab-runnerdockerlogin--username=your_nameregistry.cn-shanghai.aliyuncs.com修改.gitlab-ci.yml变量在我们的项目中:PROJECT_NAME:demoREGISTRY_URL:registry.cn-shanghai.aliyuncs.com/test_namespace和deploy.test.yml,请仔细比较以下文件。版本:'3.7'服务:演示:图像:$REGISTRY_URL/$PROJECT_NAME:测试环境:-“APP_PROJECT=demo”-“APP_ENV=test”端口:-9501:9501部署:副本:1restart_policy:条件:失败延迟:5smax_attempts:5update_config:parallelism:2delay:5sorder:start-firstnetworks:-default-networkconfigs:-source:demo_v1.0target:/opt/www/.envconfigs:demo_v1.0:external:truenetworks:default-network:external:true然后在我们的portainer中,创建对应的Configdemo_v1.0。当然下面的参数需要根据实际情况进行调整,因为我们的Demo中没有IO操作,所以填默认即可。APP_NAME=demoDB_DRIVER=mysqlDB_HOST=localhostDB_PORT=3306DB_DATABASE=hyperfDB_USERNAME=rootDB_PASSWORD=DB_CHARSET=utf8mb4DB_COLLATION=utf8mb4_unicode_ciDB_PREFIX=REDIS_HOST=localhostREDIS_AUTH=REDIS_PORT=6379REDIS_DB=0因为我们配置的gitlab-ci.yml会检测test分支和tags,所以我们把修改的内容合并到测试分支,然后推送到gitlab。接下来,我们可以访问集群中任意一台机器的9501端口。测试过curlhttp://127.0.0.1:9501/意外情况fatal:gitfetch-pack:expectedshallowlist这种情况是gitlab-runner使用的git版本太低,更新git版本即可。$curlhttps://setup.ius.io|sh$yumremove-ygit$yum-yinstallgit2u$gitversion#重新安装gitlab-runner并重新注册gitlab-runner$yuminstallgitlab-runner