docker-swarm

初始化集群


docker swarm init

创建自定义 Overlay 网络


docker network create \
--driver overlay \
--subnet 10.0.0.0/24 \
--opt encrypted \
--attachable \
default-network

加入集群


# 显示manager节点的TOKEN
docker swarm join-token manager

# 加入manager节点到集群
docker swarm join --token <token> ip:2377

# 显示worker节点的TOKEN
docker swarm join-token worker

# 加入worker节点到集群
docker swarm join --token <token> ip:2377

Docker Swarm提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案

Swarm是使用SwarmKit构建的Docker引擎内置(原生)的集群管理和编排工具

使用Swarm集群之前需要了解以下几个概念

节点

  • 节点 - 分为管理(manager)节点和工作(worker)节点
  • 管理节点用于Swarm集群的管理,docker swarm命令基本只能在管理节点执行
  • 节点退出集群命令docker swarm leave可以在工作节点执行
  • 集群可以有多个管理节点,但只有一个管理节点可以成为leader,leader通过raft协议实现

任务

  • 任务(Task)是Swarm中的最小的调度单位,目前来说就是一个单一的容器

服务

  • 服务(Services)是指一组任务的集合,服务定义了任务的属性。服务有两种模式
  • replicated services按照一定规则在各个工作节点上运行指定个数的任务
  • global services每个工作节点上运行一个任务
  • 两种模式通过docker service create --mode参数指定

创建Swarm集群

创建3个或者更多docker容器

进入管理节点容器,输入docker swarm init --advertise-addr 192.168.10.11初始化一个swarm集群

进入另外两个容器,分别输入docker swarm join --token your_token 192.168.10.11:2377加入管理节点

相关命令

# 查看节点
docker node ls

# 在manager主机中创建3个nginx副本的集群
docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine

# 查看服务
docker service ls

# 查看某个服务的详情
docker service ps nginx

# 查看某个服务的日志
docker service logs nginx

# 服务伸缩
docker service scale nginx=5

# 删除服务
docker service rm nginx

compose文件部署服务

以wordpress为例


# 部署wordpress
docker stack deploy -c docker-compose.yml wordpress

# 查看服务
docker stack ls

# 移除服务
docker stack down

docker-compose.yml如下

version: "1.0.0"

services:
  wordpress:
    image: wordpress
    ports:
      - 80:80
    networks:
      - overlay
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    deploy:
      mode: replicated
      replicas: 3

  db:
    image: mysql
    networks:
       - overlay
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    deploy:
      placement:
        constraints: [node.role == manager]

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

volumes:
  db-data:
networks:
  overlay:

results matching ""

    No results matching ""