service实战
部署nginx
镜像下载 docker pull nginx:1.18.0-alpine
在manager节点中创建overlay网络: docker network create -d overlay nginx-net
创建5个nginx:alpines容器的集群: docker service create —name nginx —network nginx-net -p 80:80 —replicas 5 nginx:1.18.0-alpine
在manager节点使用docker service ls 命令查看服务情况,worker节点无法查看: docker service ls
在manager或者worker节点都可以执行docker ps命令查看本虚拟机容器情况: docker ps
manager节点只用于管理集群,不希望部署服务。 docker node update —availability drain master-01
使用docker service scale nginx=2命令将服务缩减为2个容器:docker service scale nginx=2
节点管理
docker node update —help
注意事项:因nginx是alpine的linux版本。不能使用/bin/bash指令。
docker exec -it 503fe639bb89 sh
nginx -v
1.更新镜像:
docker service update —image nginx:1.19.3-alpine nginx
2.添加或者更新一个对外端口:
docker service update —publish-add 8090:80 nginx
删除服务
docker service rm nginx
docker network rm nginx-net
stack实战
部署Nginx
version: "3"service:nginx-web:image: nginx:1.19.3-alpincontainer_name:nginxnetworks:- nginx-netrestart:alwaysports:- 80:80deploy:replilcas: 5networks:nginx-net:driver: overlay
运行nginx
在manager节点中创建docker-compose.yml文件。执行如下命令:
docker stack deploy nginx-stack —compose-file=docker-compose.yml 或者是
docker stack deploy nginx-stack -c docker-compose.yml
查看stack服务运行情况。执行如下命令:
docker stack services nginx-stack
查看5个容器运行在哪个节点中。执行如下命令:
docker service ls 查看到NAME中的服务名为:nginx-stack_nginx-web
docker service ps nginx-stack_nginx-web
进行测试:
curl 192.168.0.105
curl 192.168.0.106
curl 192.168.0.107
删除stack服务。执行如下命令:docker stack rm nginx-stack
总结
- networks中也可以不指定driver:overlay,因为docker swarm默认网络类型是overlay。
- 整个networks都可以不用配置。stack部署时会默认创建网络。如果我们定义网络。在docker stack deploy时会先默认创建一个网络,在创建一个我们定义的网络。
- 一定要把镜像先拉取到本地再执行
Docker Stack和Docker Compose区别
Docker stack会忽略了“构建”指令,无法使用stack命令构建新镜像,它是需要镜像是预先已经构建好的。 所以docker-compose更适合于开发场景;
Docker Compose是一个Python项目,在内部,它使用Docker API规范来操作容器。所以需要安装Docker -compose,以便与Docker一起在您的计算机上使用;
Docker Stack功能包含在Docker引擎中。你不需要安装额外的包来使用它,docker stacks 只是swarm mode的一部分。
Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而Docker Compose对版本为2和3的 文件仍然可以处理;
docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。同时,对于大多数用户来说,切换到使用docker stack既不困难,也不需要太多的开销。如果您是Docker新手,或正在选择用于新项目的技术,请使用docker stack。
