a-cloud-all/.devops/scripts/docker.py

86 lines
2.5 KiB
Python
Raw Normal View History

2026-01-10 15:15:45 +08:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Docker Compose 部署模块
"""
import os
import subprocess
from pathlib import Path
from .log import Logger
def run_docker_compose(compose_dir, service_name):
"""
执行 docker-compose 命令
参数
compose_dir: docker-compose.yml 所在目录
service_name: 要构建和启动的服务名称
返回
bool: 成功返回 True失败返回 False
"""
try:
# 转换为绝对路径
compose_dir = Path(compose_dir).resolve()
Logger.separator()
Logger.info("开始 Docker 部署")
Logger.separator()
Logger.info(f"执行目录: {compose_dir}")
Logger.info(f"服务名称: {service_name}")
# 检查目录是否存在
if not compose_dir.exists():
Logger.error(f"目录不存在: {compose_dir}")
return False
# 检查 docker-compose.yml 是否存在
compose_file = compose_dir / "docker-compose.yml"
if not compose_file.exists():
Logger.error(f"docker-compose.yml 不存在: {compose_file}")
return False
# 构建镜像
Logger.info(f"执行命令: docker-compose build --no-cache {service_name}")
result = subprocess.run(
f"docker-compose build --no-cache {service_name}",
shell=True,
cwd=compose_dir,
capture_output=True,
text=True
)
if result.returncode != 0:
Logger.error(f"镜像构建失败: {service_name}")
if result.stderr:
Logger.error(f"错误信息: {result.stderr}")
return False
Logger.info(f"镜像构建成功: {service_name}")
# 启动服务
Logger.info(f"执行命令: docker-compose up -d {service_name}")
result = subprocess.run(
f"docker-compose up -d {service_name}",
shell=True,
cwd=compose_dir,
capture_output=True,
text=True
)
if result.returncode != 0:
Logger.error(f"服务启动失败: {service_name}")
if result.stderr:
Logger.error(f"错误信息: {result.stderr}")
return False
Logger.info(f"服务启动成功: {service_name}")
Logger.info(f"Docker 部署完成: {service_name}")
return True
except Exception as e:
Logger.error(f"Docker 部署异常: {e}")
return False