天天看点

docker stack 简介

作者:小昕昕粑粑

概念

docker-compose 只能单机部署项目

docker swarm 集群部署项目但是不能同时编排多个服务

docker stack 集群部署项目且可同时编排多个服务

root@chris-virtualmachine-2:~# docker stack --help

Usage:  docker stack [OPTIONS] COMMAND

Manage Docker stacks

Options:
      --orchestrator string   Orchestrator to use (swarm|kubernetes|all)

Commands:
  deploy      Deploy a new stack or update an existing stack
  ls          List stacks
  ps          List the tasks in the stack
  rm          Remove one or more stacks
  services    List the services in the stack
           

实战准备

以.net 6 web api项目为例,源码地址

Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Docker.Stack.Demo/Docker.Stack.Demo.csproj", "Docker.Stack.Demo/"]
RUN dotnet restore "Docker.Stack.Demo/Docker.Stack.Demo.csproj"
COPY . .
WORKDIR "/src/Docker.Stack.Demo"
RUN dotnet build "Docker.Stack.Demo.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Docker.Stack.Demo.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Docker.Stack.Demo.dll"]
           

docker-compose.yml

version: '3.8'

services:
  web:
    image: stack-demo:1.0
    ports:
      - 8080:80
    networks:
      - my-network
    deploy:
      mode: replicated
      replicas: 10 # 部署10个service
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      update_config:
        parallelism: 1
        delay: 10s
        order: stop-first

networks:
  my-network:
    driver: overlay
           

实战

swarm 进群搭建

# 此节点是leader节点
docker swarm init --advertise-addr 192.168.32.129 

# 此节点是worker节点
docker swarm join --token SWMTKN-1-2k33oy7alpiq3v22m3m0gc3klhwma75yrsqn18teo0frzcltcd-apx903yjwediqshvb8nkz2t8i 192.168.32.129:2377   
           

生成镜像

由于本实例docker-compose.yml中用到的镜像必须依赖于Dockerfile去构建,而docker stack 不会自动帮我们去构建,多以需要主动去构建镜像

# 根据Dockerfile构建镜像
docker build -t stack-demo:1.0 .
           

stack部署

root@chris-virtualmachine-2:~/stack-demo# docker stack --help

Usage:  docker stack [OPTIONS] COMMAND

Manage Docker stacks

Options:
      --orchestrator string   Orchestrator to use (swarm|kubernetes|all)

Commands:
  deploy      Deploy a new stack or update an existing stack
  ls          List stacks
  ps          List the tasks in the stack
  rm          Remove one or more stacks
  services    List the services in the stack
           
# 开始部署 
docker stack deploy stackdemo --compose-file=docker-compose.yml

# 查看stack服务列表
root@chris-virtualmachine-2:~/stack-demo# docker stack ls
NAME       SERVICES   ORCHESTRATOR
stackdemo   1          Swarm

# 查看stackdemo服务部署详情--会分不到集群中的每一个节点上
root@chris-virtualmachine-2:~/stack-demo# docker stack ps stackdemo
ID             NAME               IMAGE            NODE                     DESIRED STATE   CURRENT STATE              ERROR     PORTS
f0aa6lsd1n52   stackdemo_web.1    stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago             
primxwvd26rg   stackdemo_web.2    stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago             
q7qxdwalbvi4   stackdemo_web.3    stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago             
ymcpg367u3n7   stackdemo_web.4    stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago             
pgro39ceqfni   stackdemo_web.5    stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago             
n0d2yklfx520   stackdemo_web.6    stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago             
m9753wn9yjgz   stackdemo_web.7    stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago             
9pykf97jcz9z   stackdemo_web.8    stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago             
cb3jvkls46na   stackdemo_web.9    stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago             
e95ouv20wrr8   stackdemo_web.10   stack-demo:1.0   chris-virtualmachine-2   Running         Preparing 23 seconds ago