天天看點

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