Docker实现Linux服务编排的核心工具
Docker生态中,Docker Compose(用于多容器应用编排)和Docker Swarm(用于容器集群管理)是Linux环境下实现服务编排的主要工具。两者均通过声明式配置简化了多容器应用的部署、管理与扩展,覆盖从开发环境到生产环境的不同需求。
Docker Compose通过YAML格式的docker-compose.yml
文件定义一组相关容器(服务),实现一键启动、停止、扩展及管理多容器应用,适用于开发、测试或小型生产环境。
docker-compose.yml
文件定义的一组相关服务,构成一个完整的业务单元(如“博客系统”包含Web服务和数据库服务)。volumes
配置实现数据持久化(避免容器删除后数据丢失)。在Linux系统上,通过以下命令快速安装Docker Compose:
# 下载最新版本二进制文件(替换为当前版本)
sudo curl -L "https://github.com/docker/compose/releases/download/2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装(显示版本号即成功)
docker-compose --version
注:需提前安装Docker(
sudo apt install docker.io
或sudo yum install docker-ce
)。
以“Nginx+MySQL”应用为例,docker-compose.yml
文件结构如下:
version: '3.8' # 指定Compose文件版本(兼容Docker引擎版本)
services:
web: # 服务1:Web服务(Nginx)
image: nginx:latest # 使用官方Nginx镜像
ports:
- "8080:80" # 映射主机8080端口到容器80端口
volumes:
- ./web:/usr/share/nginx/html # 挂载主机web目录到容器HTML目录(实现数据持久化)
depends_on: # 定义服务依赖(确保db服务先启动)
- db
db: # 服务2:数据库服务(MySQL)
image: mysql:5.7 # 使用MySQL 5.7镜像
environment: # 设置环境变量(配置数据库)
MYSQL_ROOT_PASSWORD: example # root用户密码
MYSQL_DATABASE: mydb # 创建默认数据库
MYSQL_USER: user # 创建普通用户
MYSQL_PASSWORD: password # 普通用户密码
volumes:
- ./data:/var/lib/mysql # 挂载主机data目录到容器数据目录(持久化数据库文件)
注:
depends_on
仅保证服务启动顺序,不等待应用就绪(如MySQL完全启动),需结合健康检查(healthcheck
)实现。
在docker-compose.yml
文件所在目录执行以下命令:
# 启动所有服务(后台运行)
docker-compose up -d
# 查看运行中的服务状态
docker-compose ps
# 查看服务日志(实时输出)
docker-compose logs -f
# 停止并删除所有容器、网络、卷(彻底清理)
docker-compose down
# 重建服务(拉取最新镜像、重新构建)
docker-compose up -d --build
# 进入某个服务容器(如web服务)
docker-compose exec web bash
注:
-d
参数表示后台运行,--build
用于强制重新构建镜像(如修改Dockerfile后)。
Docker Swarm是Docker原生集群管理工具,可将多个Docker主机(Manager节点+Worker节点)组成一个集群,实现高可用、负载均衡、滚动更新等服务编排功能,适用于生产环境的大规模应用部署。
在Manager节点上执行以下命令初始化集群(生成加入集群的Token):
# 初始化Swarm(指定Manager节点IP,如192.168.1.100)
docker swarm init --advertise-addr 192.168.1.100
输出结果包含Worker节点加入Token(如docker swarm join --token SWMTKN-1-xxxx... 192.168.1.100:2377
)。
在Worker节点上执行Manager节点输出的docker swarm join
命令,将节点加入集群:
docker swarm join --token SWMTKN-1-xxxx... 192.168.1.100:2377
注:需确保Worker节点与Manager节点网络互通(开放2377端口)。
通过docker stack deploy
命令部署应用(基于docker-compose.yml
文件):
# 部署服务(命名为myapp,使用当前目录下的docker-compose.yml文件)
docker stack deploy -c docker-compose.yml myapp
# 查看集群中运行的服务
docker service ls
# 查看某个服务的详细信息(如web服务)
docker service ps myapp_web
# 扩展服务副本数量(将web服务扩展到3个实例)
docker service scale myapp_web=3
注:
docker stack deploy
会自动创建Overlay网络、部署任务到Worker节点,并实现负载均衡(通过服务名称访问,如http://192.168.1.100:8080
)。
通过上述工具,Docker实现了Linux环境下服务编排的需求,简化了多容器应用的管理流程,提升了部署效率和可靠性。