1.docker stack解决什么问题?
在前面的文章中,我们介绍Docker Compose,缺点是不能在分布式多机器上使用;我们还介绍了Docker swarm,缺点是不能同时编排多个服务,所以才有了Docker Stack,可以在分布式多机器上同时编排多个服务。
docker stack 相当于 docker-compose和docker swarm相结合,容器编排集群部署
2.使用方法
1.先创建两个简单springboot项目(java计数器) test1和test2,分别创建对应的Dockerfile文件
test1
@RestController
public class HelloController {
@Autowired
private StringRedisTemplate redisTemplate;
@GetMapping("/test1")
public String hello1() {
Long views = redisTemplate.opsForValue().increment("views");
return "test1 当前访问次数: " + views;
}
}
test1的Dockerfile
#基础镜像
FROM java:8
#将所有jar包拷贝到/app.jar
COPY ./target/*.jar /app.jar
#暴露端口
EXPOSE 9090
#执行运行jar包命令
CMD ["java","-jar", "/app.jar"]
test2
@RestController
public class HelloController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("test2")
public String hello() {
Long views = redisTemplate.opsForValue().increment("views");
return "test2 当前访问次数 :" + views;
}
}
test2的Dockerfile
#基础镜像
FROM java:8
#将所有jar包拷贝到/app.jar
COPY ./target/*.jar /app.jar
#暴露端口
EXPOSE 9091
#执行运行jar包命令
CMD ["java","-jar", "/app.jar"]
2.将Dockerfile打成镜像上传到dockerhub上,这里以test1为例
docker build -t test:1.0 .
docker tag test:1.0 crazypeople/test:1.0
docker login
docker push crazypeople/test:1.0
3.编写docker-compose.yml文件 ,并上传到服务器上面
version: "3.8"
services:
counter_web1:
#这里要写刚刚上传到dockerhub上的镜像
image: crazypeople/test1:1.0
container_name: counter_web1
deploy:
replicas: 4
depends_on:
- redis-test
ports:
- "9090:9090"
counter_web2:
image: crazypeople/test2:1.0
container_name: counter_web2
deploy:
replicas: 4
depends_on:
- redis-test
ports:
- "9091:9091"
redis-test:
container_name: redis_test
image: redis:6.0-alpine
4.创建swarm集群 如何创建swarm集群
5.使用docker stack deploy 部署
docker stack deploy my-test --compose-file=docker-compose.yml路径
6.使用命令查看
docker stack services stack名 查看该stack中有多少个服务
docker stack ps stack名. 查看该stack中所有任务信息
7.移除stack
docker stack rm stack名