docker集群搭建
使用docker swarm搭建集群
参考:https://blog.csdn.net/zz_aiytag/article/details/103716463
我的应用环境
软件 | 版本 |
---|---|
centos | 7.4-1708 |
docker | 18.03.0-ce |
使用docker stack运行服务
Stack是一组Service,不需要每个Service单独执行启动命令。
选择某个路径新建一个文件夹,
进入文件夹内,新建一个docker-compose.yml
文件
输入以下内容
version: "3"
services:
# mysql数据库服务
db:
image: mysql:5.7
networks:
- mynetwork
volumes:
- myvolume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: mywordpress
MYSQL_DATABASE: wordpress
# wordpress服务
wordpress:
depends_on:
- db
image: wordpress
networks:
- mynetwork
ports:
- 8090:80 # 映射端口自定义
environment:
WORDPRESS_DB_PASSWORD: mywordpress
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
volumes:
myvolume:
networks:
mynetwork:
执行以下命令启动这一组服务
f_wordpress
名自定义
docker stack deploy -c docker-compose.yml f_wordpress
[root@worker swarm-1]# docker stack deploy -c docker-compose.yml f_wordpress
Creating network f_wordpress_mynetwork
Creating service f_wordpress_db
Creating service f_wordpress_wordpress
使用docker stack ls
指令查看集群中运行的所有完整应用。
docker stack ls
[root@worker swarm-1]# docker stack ls
NAME SERVICES
f_wordpress 2
查看应用内各服务的信息
docker stack ps f_wordpress
[root@worker swarm-1]# docker stack ps f_wordpress
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
c2t99jvksdai f_wordpress_wordpress.1 wordpress:latest master.node Running Running 25 seconds ago
ql7cbeifgdrs f_wordpress_db.1 mysql:5.7 worker.node Running Running 23 seconds ago
2个服务运行在两个节点 上,浏览器上输入任一个节点的IP:8090
结果均可访问wordpress。
使用docker stack指定节点运行服务
按hostname指定节点
指定service运行的节点需要在docker-compose.yml
文件中增加deploy
属性
version: "3"
services:
#mysql数据库
db:
image: mysql:5.7
networks:
- mynetwork
volumes:
- myvolume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: mywordpress
MYSQL_DATABASE: wordpress
deploy:
placement:
constraints: [node.hostname == worker.node] # 指定hostname
#wordpress
wordpress:
depends_on:
- db
image: wordpress
networks:
- mynetwork
ports:
- 8090:80
environment:
WORDPRESS_DB_PASSWORD: mywordpress
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
deploy:
placement:
constraints: [node.hostname == manager.node] # 指定hostname
volumes:
myvolume:
networks:
mynetwork:
重新运行应用
docker stack deploy -c docker-compose.yml h_wordpress
[root@worker swarm-1]# docker stack deploy -c docker-compose.yml h_wordpress
Creating network h_wordpress_mynetwork
Creating service h_wordpress_wordpress
Creating service h_wordpress_db
查看服务运行节点
docker stack ps h_wordpress
[root@worker swarm-1]# docker stack ps h_wordpress
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
s2zx1uwksokp h_wordpress_db.1 mysql:5.7 worker.node Running Running 15 seconds ago
qjx9z1do63it h_wordpress_wordpress.1 wordpress:latest manager.node Running Running 32 seconds ago
几种指定节点的方式
- 根据manager或者worker节点
- 根据node的主机名
- 根据node标签
- 根据node的ID
- 根据engine标签
查看自动创建的volume
使用docker volume ls指令查看集群中的volume
docker volume ls
[root@worker _data]# docker volume ls
DRIVER VOLUME NAME
local 1e0e2f11cd6aa88aa6ac15d8d1c85053120abad9f89c6afe64cdeeaae7044424
local 1f3d66d8dbc3e576e468411b99675a230d82e36dfdccd24683cfed3a83d3e8ea
local 5540adaf6bcd80669935a5246c00ed8e74bc0b30299ba83419b92a0195740b43
local 6ebb29a8498f6dd909d475bdc2c89f2e3c45346314dfc751c2768cc91141a5e5
local 89be7dbd3526b4d1b821ceff8df40adcd0b63be295dd91ba871ecb5684d23352
local d54ecb3a03110548bdf6e8bc5837422fb2dbe408cf507c036a0e7438af21b55d
local f_wordpress_myvolume
local my-vol
local mysql-data
查看stack应用启动时创建的volume
[root@worker ~]# docker volume inspect f_wordpress_myvolume
[
{
"CreatedAt": "2019-12-27T14:43:58+08:00",
"Driver": "local",
"Labels": {
"com.docker.stack.namespace": "f_wordpress"
},
"Mountpoint": "/var/lib/docker/volumes/f_wordpress_myvolume/_data",
"Name": "f_wordpress_myvolume",
"Options": {},
"Scope": "local"
}
]
遇到的问题
在执行docker stack
创建应用时,出现了下边的错误,
[root@worker swarm-1]# docker stack deploy -c docker-compose.yml e_wordpress
services.db.volumes.0 must be a string
这个错误的原因是自己粗心大意,手敲的时候在冒号后面多敲了个空格。
volumes:
- myvolume:/var/lib/mysql # 冒号后没有空格