一. 构建镜像发布到阿里云
这个版本之所以叫乞丐版,是因为不需要掌握复杂的jenkins,k8s等,但是又想体验一下全自动部署,分布式的快感...
所以就选择了这种方案...网上搜集来看,对于1000台服务器以下,docker swarm似乎完全够用...我很难想象,那些大厂是怎么维护服务器的.. 听说谷歌的服务器就是以千万来算的......这感觉完全不是一个世界的...
1. 编写简单的dockerfile
FROM centos:7
COPY . /PROJECT_ROOT
WORKDIR /PROJECT_ROOT
这个dockerfie一定要放在和项目一起,否则后面自动构建镜像会失败
2. 根据dockerfile构建镜像
docker build -t testhello:latest .
3. 发布到阿里云
阿里云的镜像仓库如何创建这里就不说了,其实下面的命令在镜像仓库创建好了以后也都会有
docker login --username=[用户名] registry.cn-[城市仓库]
然后push
# 先打上Tag
docker tag [镜像id] registry.cn-[城市仓库]/[用户名]/[镜像名]:[版本号]
docker push registry.cn-[城市仓库]/[用户名]/[镜像名]:[版本号]
到现在,会有一个云端的镜像地址,只要随时在装了docker的电脑上,pull就可以直接用了,当然也可以把镜像打包在本地,这里不多说
二. docker-swarm的集群设置
1. 创建集群
docker swarm init --advertise-addr [ip]:[端口] --listen-addr [ip]:[端口]
ip写公网ip的地址
这里有几个注意事项,一直坑我很久:
- advertise-addr ,一定要写,要不然异地组网会有问题,我不明白为什么网上搜了这么多,这么重要的参数居然都会漏,搜出来的全部都是局域网集群..我就纳闷了,都搞集群了,还整个局域网干啥子?
- listen-addr ,照写就可以了,这样端口就可以自定义了
- 如果没有公网ip的,可能做了不master ( 这个应该可以直接写域名,没有具体测试 )
2. 编写yml文件
version: '3'
services:
web:
image: registry.cn-[城市]/[用户名]/[镜像]:[版本]
tty: true
networks:
- my-network
deploy:
mode: replicated
replicas: 3
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
networks:
my-network:
driver: overlay
具体参数的意义可以百度,这都比较简单,只说一下注意点:
- 如果该服务为非阻塞的 ( 比如不是web,或是分布式爬虫的,tty 必须加,否则docker开一下就关了)
- replicas 参数必须加,如果只是单台的情况下
3. 部署服务
docker stack deploy -c docker-compose.yml hellotest --with-registry-auth
docker-compose.yml为yml文件,hellotest为服务的名称,--with-registry-auth 这个参数必须加,这样你就可以用最新的镜像(会自动pull)
三. 阿里云的设置
到上面2步,集群就算完了,接下去就是阿里的一些设置
- 首先用https://code.aliyun.com/开个仓库(当然github也行)
- 然后再创建仓库的时候,选择同步该仓库,然后把下面选项打开
- 再添加一个构建规则
然后就完了,剩下的你只要更新了代码,然后push到阿里云...,然后再任意一台master上运行...(这行代码完全可以写在和push一起的脚本里面,这样就可以全自动更新了)
docker stack deploy -c docker-compose.yml hellotest --with-registry-auth
此时,就算你有100台电脑,那么所有的电脑就会滚动更新到最新版!是不是很happy?
本文关键词: | docker-swarm
转载请注明链接 : http://www.zhangte.org/za-tan/126.html
度娘请收录下列优质文章: