一、Stack介绍
Docker Compose缺点是不能在分布式多机器上使用;Docker swarm缺点是不能同时编排多个服务,所以才有了Docker Stack,可以在分布式多机器上同时编排多个服务。
二、使用实例
2.1 案例准备
父工程demo包含两个子工程:
service1
@Slf4j
@RestController
public class HelloRest {
@GetMapping("/service1/getHello")
public String getHello(){
log.info("service1!!!");
return "hello from service1";
}
}
dockerfile
FROM openjdk:8
EXPOSE 8080
ADD target/service1-0.0.1-SNAPSHOT.jar /demo.jar
ENTRYPOINT ["java", "-jar", "demo.jar"]
service2
@Slf4j
@RestController
public class HelloRest {
@GetMapping("/service2/getHello")
public String getHello(){
log.info("service2!!!");
return "hello from service2";
}
}
dockerfile
FROM openjdk:8
EXPOSE 8081
ADD target/service2-0.0.1-SNAPSHOT.jar /demo.jar
ENTRYPOINT ["java", "-jar", "demo.jar"]
2.2 打包镜像
分别在service1和service2目录下执行如下命令,分别打包镜像:
docker build -t service1:V1 .
docker build -t service2:V1 .
然后执行docker images查看一下镜像是否正常创建成功:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
service1 V1 a0ccc239fe29 22 minutes ago 544MB
service2 V1 2100104dd6eb 22 minutes ago 544MB
2.3 编写compose
编写compose文件内容如下,文件路径及文件名为/root/docker-compose.yml:
version: "3.9"
services:
service1:
image: "masonzhang/service1:V1"
deploy:
replicas: 2
ports:
- "8080:8080"
service2:
image: "masonzhang/service2:V1"
deploy:
replicas: 3
ports:
- "8081:8081"
2.4 swarm集群搭建
2.5 stack部署
使用stack进行集群部署了。
# myapps是stack的自定义名称,使用具体路径的compose配置文件进行部署
docker stack deploy myapps --compose-file=/root/docker-compose.yml
或者
docker stack deploy myapps -c /root/docker-compose.yml
Creating network myapps_default
Creating service myapps_service1
Creating service myapps_service2
2.6 stack其它操作
创建完成后,我们可以通过如下命令查看stack及服务的信息:
# 查看所有stack的信息
docker stack ls
NAME SERVICES ORCHESTRATOR
myapps 2 Swarm
# 查看某个stack中的所有任务信息
docker stack ps myapps
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE
tvvujrf3qcr1 myapps_service1.1 masonzhang/service1:V1 node1 Running Running 46 seconds ago
igjeydmmvzzm myapps_service1.2 masonzhang/service1:V1 manager Running Running 46 seconds ago
7p5c96eplwl3 myapps_service2.1 masonzhang/service2:V1 node1 Running Running 34 seconds ago
7shglsajip5d myapps_service2.2 masonzhang/service2:V1 manager Running Running 39 seconds ago
upo0mr7j9tn1 myapps_service2.3 masonzhang/service2:V1 node2 Running Preparing 41 seconds ago
# 查看某个stack中的所有服务信息
docker stack services myapps
ID NAME MODE REPLICAS IMAGE PORTS
icz3kjn0skb3 myapps_service1 replicated 2/2 masonzhang/service1:V1 *:8080->8080/tcp
myuzlwnrxag4 myapps_service2 replicated 3/3 masonzhang/service2:V1 *:8081->8081/tcp
# 移除stack
docker stack rm myapps
Removing service myapps_service1
Removing service myapps_service2
Removing network myapps_default