docker swarm集群搭建的步骤

发布时间:2021-07-02 16:45:32 作者:chen
来源:亿速云 阅读:314
# Docker Swarm集群搭建的步骤

## 前言

Docker Swarm是Docker官方提供的容器编排工具,它允许用户将多个Docker主机组成一个集群,统一管理容器服务。相比于Kubernetes,Swarm具有更轻量、易上手的特点,适合中小规模的应用场景。本文将详细介绍如何从零开始搭建一个Docker Swarm集群。

---

## 一、环境准备

### 1.1 硬件要求
- 至少2台Linux主机(物理机或虚拟机)
  - 推荐配置:2核CPU/4GB内存/20GB存储
  - 操作系统:Ubuntu 20.04 LTS/CentOS 7+
- 网络要求:
  - 所有节点在同一局域网
  - 开放端口:2377/tcp(管理端口)、7946/tcp+udp(节点通信)、4789/udp(覆盖网络)

### 1.2 软件要求
- Docker Engine 20.10+
- 所有节点时间同步(建议安装NTP服务)
- 主机名解析(可通过`/etc/hosts`或DNS配置)

---

## 二、基础环境配置

### 2.1 安装Docker引擎
在所有节点执行以下命令:

```bash
# Ubuntu示例
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 验证安装
sudo docker --version

2.2 配置Docker守护进程

修改/etc/docker/daemon.json(如不存在则创建):

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

重启Docker服务:

sudo systemctl restart docker

三、初始化Swarm集群

3.1 主节点初始化

选择一台作为管理节点(Manager)执行:

sudo docker swarm init --advertise-addr <MANAGER_IP>

示例输出:

Swarm initialized: current node (xyz) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-xxx <MANAGER_IP>:2377

3.2 获取加入令牌

查看管理令牌:

docker swarm join-token manager

查看工作节点令牌:

docker swarm join-token worker

3.3 添加工作节点

在其他节点上执行join命令:

sudo docker swarm join --token <TOKEN> <MANAGER_IP>:2377

四、集群验证与管理

4.1 查看集群状态

在管理节点执行:

docker node ls

示例输出:

ID       HOSTNAME   STATUS  AVLABILITY  MANAGER STATUS
abc123   manager1   Ready   Active        Leader
def456   worker1    Ready   Active

4.2 节点角色管理

提升工作节点为管理节点:

docker node promote <NODE-ID>

降级管理节点:

docker node demote <NODE-ID>

五、网络配置

5.1 创建覆盖网络

docker network create --driver overlay --subnet 10.0.9.0/24 my-overlay

5.2 验证网络

docker network ls

六、服务部署实战

6.1 部署Nginx服务

docker service create \
  --name nginx \
  --replicas 3 \
  --publish published=8080,target=80 \
  --network my-overlay \
  nginx:latest

6.2 服务管理命令

命令 说明
docker service ls 查看服务列表
docker service ps <SERVICE> 查看服务详情
docker service scale <SERVICE>=5 扩展副本数
docker service update --image nginx:alpine <SERVICE> 滚动更新

七、数据持久化方案

7.1 使用volume

创建全局volume:

docker volume create app-data

挂载volume:

docker service create \
  --mount type=volume,source=app-data,target=/app \
  --name redis \
  redis:alpine

7.2 NFS共享存储

docker service create \
  --mount 'type=volume,src=nfsvol,dst=/app,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/path/on/nfs,"volume-opt=o=addr=<NFS_SERVER>,vers=4,soft,timeo=180,bg,tcp,rw"' \
  --name nfs-app \
  nginx

八、安全加固建议

8.1 证书配置

生成CA证书:

openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

8.2 启用TLS

修改daemon.json

{
  "tls": true,
  "tlscacert": "/path/to/ca.pem",
  "tlscert": "/path/to/server-cert.pem",
  "tlskey": "/path/to/server-key.pem"
}

九、常见问题排查

9.1 节点无法加入

9.2 网络通信失败


十、集群监控方案

10.1 部署cAdvisor

docker service create \
  --mode global \
  --name cadvisor \
  --mount type=bind,source=/,target=/rootfs,readonly=true \
  --mount type=bind,source=/var/run,target=/var/run \
  --mount type=bind,source=/sys,target=/sys,readonly=true \
  --mount type=bind,source=/var/lib/docker/,target=/var/lib/docker,readonly=true \
  google/cadvisor:latest

10.2 Prometheus集成

示例配置:

scrape_configs:
  - job_name: 'docker-swarm'
    static_configs:
      - targets: ['manager1:8080', 'worker1:8080']

结语

通过以上步骤,我们完成了Docker Swarm集群的搭建和基础配置。Swarm的简单易用特性使其成为容器编排的良好入门选择。对于生产环境,建议结合CI/CD管道和监控系统构建完整的容器化平台。后续可以进一步探索: - 服务滚动更新策略 - 配置管理(docker config) - 密钥管理(docker secret) - 与Traefik等工具集成

注意:本文所有命令需根据实际环境修改IP地址、主机名等参数。建议在测试环境验证后再部署到生产环境。 “`

(全文约2300字,实际字数可能因Markdown渲染略有差异)

推荐阅读:
  1. 如何修改docker中gwbridge的address?
  2. docker和容器的区别都有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker swarm docker

上一篇:C语言中可变参数的原理是什么

下一篇:c语言中如何将大写字母转成小写

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》