一、Docker Compose和Docker Stack区别
1、Docker stack会忽略了“构建”指令,您无法使用stack命令构建新镜像,它是需要镜像是预先已经构建好的,所以docker-compose更适合于开发场景。
2、还有一些compose-file规范被docker-compose或stack命令忽略。
3、Docker Compose是一个Python项目。 最初,有一个名为 fig 的Python项目,用于解析 fig.yml 文件,你猜对了 - 堆栈的Docker容器。每个人都喜欢它,特别是Docker的追随者,最后它慢慢的融入了docker 产品中,但它仍然在Python中,运行在Docker引擎之上。
在内部,它使用 Docker API 规范来操作容器,所以您仍然需要分别安装Docker-compose,以便与Docker一起在您的计算机上使用。
4、Docker Stack功能包含在Docker引擎中,你不需要安装额外的包来使用它,docker stacks 只是 swarm mode 的一部分,它支持相同类型的 compose 文件,但实际的处理是发生在 Docker Engine(docker引擎)内部的Go代码中。
在使用堆栈命令之前,还必须创建一个单机版的“swarm”,但这并不是什么大问题。
5、如果你的docker-compose.yml 是基于第二版写的(在docker-compose.yml中指定version: "2"),那么Docker stack是不支持的。
你必须使用最新版本,也就是version版本至少为3,然而Docker Compose对版本为 2 和 3 的文件仍然可以处理。
docker-compose 和新命令 docker stack commands 都可以处理版本号为 3 的 docker-compose.yml 文件。对于版本号为2的文件,你不得不继续使用docker-compose,如果你想升级,也不需要做太多的工作。
由于 docker stack 把 docker compose 的所有工作都做完了,因此可以肯定 docker stack 将占主导地位,这意味着 docker-compose 可能会被弃用,最终不会被支持。然而,对于大多数用户来说,切换到使用 docker stack 既不困难,也不需要太多的开销,您可以在将docker compose从版本2升级到版本3的同时轻松完成。如果您是Docker新手,或正在选择用于新项目的技术 - 无论如何,请坚持使用docker stack deploy。
二、Docker Stack部署web集群
1、环境:两台centos7的虚拟机或服务器,一个作为主服务器,一个作为服务器2
2、设置Docker Swarm:
docker swarm init
执行命令后会给出加入这个swarm的命令
然后在服务器2上执行上述这个命令加入swarm
这样我们就建好了swarm,两台主机现在建立好了关系。
3、web服务
4、dockerfile文件用于生成镜像
5、镜像提交到镜像仓库
因为集群的上机器是自动从仓库取镜像然后再运行程序,所以需要将我们上面生成的镜像推送到我们的镜像仓库上去。
// 使用tag重新命名
docker tag goweb:1.0 lpxxn.com:5000/goweb:1.0
// 推送
docker push lpxxn.com:5000/goweb:1.0
6、docker-compose 文件
接下来创建docker-compose.yml文件:image 就是我们上面创建好的镜像。运行5个应用程序,docker 会自己做负载,端口映射8111,失败时自动重启服务,并且创建了自己的网络,当有多个server服务时这个非常有用。
version: "3"
services:
web:
image: lpxxn.com:5000/goweb:1.0
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "8111:8000"
networks:
- gowebnet
networks:
gowebnet:
7、部署应用:到了最后的阶段了,部属一样很简单,执行deploy命令
docker stack deploy -c docker-compose.yml mygoweb
查看启动的服务
docker service ps mygoweb
参考文章:李鹏 - https://www.cnblogs.com/li-peng/p/8144372.html