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]