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
3,将 102 作为从机加入到 101 的主机,执行上图红框内的命令,会出现几节点加入的提示
4,查看集群节点,注意该命令 只能在主机使用
docker node ls
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,整个目录结构如下
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
8,在主机和个从机执行 docker ps 查看是否存在该容器
9,浏览器输入访问,一切 OK
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 查看
- 1,在主机上操作,清空从机容器:docker node update --availability drain [id]
- 2,再从机上操作,从机离开主机:docker swarm leave
- 3,在主机上操作,删除从机节点:docker node rm [id]