1,准备的软件

1,两台(最好三台) 安装了 centos7 系统 和 docker 软件的机器,虚拟机也行

2,两台机器之间能互通网络

3,笔者下面使用两台机器的主机地址:192.168.200.101 和 192.168.200.102

2,使用 swarm

1,简单说说理论

  • 1,是什么? swarm 是用于 docker 集群的自带软件
  • 2,集群方式? 采用一个主机,多个从机(工作节点)的模式
  • 3,功能? 只需要在主机部署容器,从机会同步相应的容器(需要拥有相同的仓库)
  • 4,作用? 省去在分布式开发中多台机器需要逐一去部署的繁杂步骤,以后只需要在主机部署容器,并指定需要多少子机,就能统一部署

2,在 101 主机上创建主机,swarm 不需要单独安装,主要安装了 docker 就自带了该软件,执行下面的命令后,会自动生成从机加入的命令

docker swarm init

docker 集群之 swarm 和 stack 的基本使用

3,将 102 作为从机加入到 101 的主机,执行上图红框内的命令,会出现几节点加入的提示

docker 集群之 swarm 和 stack 的基本使用

4,查看集群节点,注意该命令 只能在主机使用

docker node ls

docker 集群之 swarm 和 stack 的基本使用

3,部署容器,以 nginx 服务器为例,采用 docker-compose 的模式

1,docker-compose.yml,stock 启动时,不能指定容器名称

version: '3.1'
services:
  nginx:
    restart: always
    image: nginx
    ports:
      - 80:80
    deploy:
      mode: replicated   # stack 启动时,指定模式
      replicas: 2        # stack 启动时,指定启动多少节点
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./www:/usr/share/nginx/www

2,nginx.conf

# 这里不能省,指定启动的用户,不指定可能会出现 403 等错误
user root;

# 启动多少个进程,一般和 CPU 的核数相同
worker_processes  1;

events {
    # 每个进程的最大并发数
    worker_connections  1024;
}

http {

    include            mime.types;
    default_type       application/octet-stream;
    sendfile           on;
    keepalive_timeout  65;  
    
    # 配置一个服务
    server {
    
        # 监听的端口
        listen 80;
        
        # 虚拟主机名称(一般为域名)
        server_name  localhost;

        # 配置资源的本地路径,以及缺省路由自动默认响应文件
        location / {
            root   /usr/share/nginx/www/html80;
            index  index.html index.htm;
        }

    }
}

4,在目录下创建 www 目录,创建 html80 目录,并创建一个 index.html,并写上你想要的内容如

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>HELLO</title>
</head>
<body>
	<h1> SWARM 集群测试 </h1>
</body>
</html>

5,整个目录结构如下

docker 集群之 swarm 和 stack 的基本使用

6,在该目录下执行以下命令,启动容器

docker stack deploy -c docker-compose.yml nginx
  • 1,docker stack deploy 固定命令
  • 2,-c 指定启动的 docker-compose.yml 文件地址
  • 3,nginx 堆栈名(集群)

7,查看是否启动成功

docker stack ls
docker stack ps nginx

docker 集群之 swarm 和 stack 的基本使用

8,在主机和个从机执行 docker ps 查看是否存在该容器

docker 集群之 swarm 和 stack 的基本使用

9,浏览器输入访问,一切 OK

docker 集群之 swarm 和 stack 的基本使用
docker 集群之 swarm 和 stack 的基本使用

3,docker stack 常用的命令,下面命令中:[*]代表自定义的部分

1,部署新的堆栈(集群):docker stack deploy -c [docker-compose.yml文件地址] [堆栈名]

2,查看所有堆栈(集群):docker stack ls

3,查看堆栈下的任务:docker stack ps [堆栈名]

4,删除堆栈(集群):docker stack rm [堆栈名]

4,docker stack 常用命令

1,初始化一个主机:docker swarm init

2,作为从机加入主机:docker swarm join --token=[toekn] [ip][port]

3,移除一个从机:id 可以使用 docker node ls 查看

docker 集群之 swarm 和 stack 的基本使用

  • 1,在主机上操作,清空从机容器:docker node update --availability drain [id]
  • 2,再从机上操作,从机离开主机:docker swarm leave
  • 3,在主机上操作,删除从机节点:docker node rm [id]