update docker docstring with english

This commit is contained in:
Wendong
2025-03-10 13:54:59 +08:00
parent 476ead199d
commit 0ce706ef6b
4 changed files with 134 additions and 134 deletions

View File

@@ -1,32 +1,32 @@
# 使用ARG定义可配置的构建参数
# 使用ARG定义可配置的构建参数 | Using ARG to define configurable build parameters
ARG PYTHON_VERSION=3.10
ARG PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
ARG PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright
# 第一阶段:构建依赖
# 第一阶段:构建依赖 | Stage 1: Build dependencies
FROM python:${PYTHON_VERSION}-slim AS builder
# 设置工作目录
# 设置工作目录 | Set working directory
WORKDIR /build
# 设置pip镜像源以加速下载
# 设置pip镜像源以加速下载 | Set pip mirror to accelerate downloads
ARG PIP_INDEX_URL
RUN pip config set global.index-url ${PIP_INDEX_URL}
# 安装构建依赖
# 安装构建依赖 | Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 复制并安装requirements.txt
# 复制并安装requirements.txt | Copy and install requirements.txt
COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
# 第二阶段:运行时环境
# 第二阶段:运行时环境 | Stage 2: Runtime environment
FROM python:${PYTHON_VERSION}-slim
# 添加构建信息标签
# 添加构建信息标签 | Add build information labels
ARG BUILD_DATE
ARG VERSION
LABEL org.opencontainers.image.created="${BUILD_DATE}" \
@@ -35,72 +35,72 @@ LABEL org.opencontainers.image.created="${BUILD_DATE}" \
org.opencontainers.image.description="OWL Project Docker Image" \
org.opencontainers.image.source="https://github.com/yourusername/owl"
# 设置工作目录
# 设置工作目录 | Set working directory
WORKDIR /app
# 设置pip镜像源以加速下载
# 设置pip镜像源以加速下载 | Set pip mirror to accelerate downloads
ARG PIP_INDEX_URL
RUN pip config set global.index-url ${PIP_INDEX_URL}
# 从builder阶段复制已安装的Python包
# 从builder阶段复制已安装的Python包 | Copy installed Python packages from builder stage
COPY --from=builder /install /usr/local
# 优化apt安装减少层数
# 优化apt安装减少层数 | Optimize apt installation, reduce layers
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
ffmpeg \
libsm6 \
libxext6 \
# 添加xvfb和相关依赖
# 添加xvfb和相关依赖 | Add xvfb and related dependencies
xvfb \
xauth \
x11-utils \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 安装 Playwright 依赖(使用国内镜像源)
# 安装 Playwright 依赖(使用国内镜像源) | Install Playwright dependencies (using Chinese mirror)
ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
ARG PLAYWRIGHT_DOWNLOAD_HOST
ENV PLAYWRIGHT_DOWNLOAD_HOST=${PLAYWRIGHT_DOWNLOAD_HOST}
RUN pip install --no-cache-dir playwright && \
playwright install --with-deps chromium
# 创建非root用户
# 创建非root用户 | Create non-root user
RUN groupadd -r owl && useradd -r -g owl -m owl
# 复制项目文件
# 复制项目文件 | Copy project files
COPY owl/ ./owl/
COPY licenses/ ./licenses/
COPY assets/ ./assets/
COPY README.md .
COPY README_zh.md .
# 设置环境变量文件
# 设置环境变量文件 | Set environment variables file
COPY owl/.env_template ./owl/.env
# 创建启动脚本
# 创建启动脚本 | Create startup script
RUN echo '#!/bin/bash\nxvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" python "$@"' > /usr/local/bin/xvfb-python && \
chmod +x /usr/local/bin/xvfb-python
# 创建欢迎脚本
RUN echo '#!/bin/bash\necho "欢迎使用OWL项目Docker环境"\necho ""\necho "可用的脚本:"\nls -1 *.py | grep -v "__" | sed "s/^/- /"\necho ""\necho "运行示例:"\necho " xvfb-python run.py # 运行默认脚本"\necho " xvfb-python run_deepseek_example.py # 运行DeepSeek示例"\necho ""\necho "或者使用自定义查询:"\necho " xvfb-python run.py \"你的问题\""\necho ""' > /usr/local/bin/owl-welcome && \
# 创建欢迎脚本 | Create welcome script
RUN echo '#!/bin/bash\necho "欢迎使用OWL项目Docker环境"\necho "Welcome to OWL Project Docker environment!"\necho ""\necho "可用的脚本 | Available scripts:"\nls -1 *.py | grep -v "__" | sed "s/^/- /"\necho ""\necho "运行示例 | Run examples:"\necho " xvfb-python run.py # 运行默认脚本 | Run default script"\necho " xvfb-python run_deepseek_example.py # 运行DeepSeek示例 | Run DeepSeek example"\necho ""\necho "或者使用自定义查询 | Or use custom query:"\necho " xvfb-python run.py \"你的问题 | Your question\""\necho ""' > /usr/local/bin/owl-welcome && \
chmod +x /usr/local/bin/owl-welcome
# 设置工作目录
# 设置工作目录 | Set working directory
WORKDIR /app/owl
# 设置适当的权限
# 设置适当的权限 | Set appropriate permissions
RUN chown -R owl:owl /app
RUN mkdir -p /root/.cache && chown -R owl:owl /root/.cache
# 切换到非root用户
# 注意:如果需要访问/dev/shm可能仍需要root用户
# 切换到非root用户 | Switch to non-root user
# 注意:如果需要访问/dev/shm可能仍需要root用户 | Note: If you need to access /dev/shm, you may still need root user
# USER owl
# 添加健康检查
# 添加健康检查 | Add health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python -c "import sys; sys.exit(0 if __import__('os').path.exists('/app/owl') else 1)"
# 容器启动命令
CMD ["/bin/bash", "-c", "owl-welcome && /bin/bash"]
# 容器启动命令 | Container startup command
CMD ["/bin/bash", "-c", "owl-welcome && /bin/bash"]

View File

@@ -1,14 +1,14 @@
@echo off
setlocal enabledelayedexpansion
echo 在Windows上构建Docker镜像...
echo 在Windows上构建Docker镜像... | Building Docker image on Windows...
REM 设置配置变量
REM 设置配置变量 | Set configuration variables
set CACHE_DIR=.docker-cache\pip
set BUILD_ARGS=--build-arg BUILDKIT_INLINE_CACHE=1
set COMPOSE_FILE=docker-compose.yml
REM 解析命令行参数
REM 解析命令行参数 | Parse command line arguments
set CLEAN_CACHE=0
set REBUILD=0
set SERVICE=
@@ -32,80 +32,80 @@ if /i "%~1"=="--service" (
goto :parse_args
)
if /i "%~1"=="--help" (
echo 用法: build_docker.bat [选项]
echo 选项:
echo --clean 清理缓存目录
echo --rebuild 强制重新构建镜像
echo --service 指定要构建的服务名称
echo --help 显示此帮助信息
echo 用法 | Usage: build_docker.bat [选项 | options]
echo 选项 | Options:
echo --clean 清理缓存目录 | Clean cache directory
echo --rebuild 强制重新构建镜像 | Force rebuild image
echo --service 指定要构建的服务名称 | Specify service name to build
echo --help 显示此帮助信息 | Show this help message
exit /b 0
)
shift
goto :parse_args
:end_parse_args
REM 检查Docker是否安装
REM 检查Docker是否安装 | Check if Docker is installed
where docker >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
echo 错误: Docker未安装
echo 请先安装Docker Desktop: https://docs.docker.com/desktop/install/windows-install/
echo 错误 | Error: Docker未安装 | Docker not installed
echo 请先安装Docker Desktop | Please install Docker Desktop first: https://docs.docker.com/desktop/install/windows-install/
pause
exit /b 1
)
REM 检查Docker是否运行
REM 检查Docker是否运行 | Check if Docker is running
docker info >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
echo 错误: Docker未运行
echo 请启动Docker Desktop应用程序
echo 错误 | Error: Docker未运行 | Docker not running
echo 请启动Docker Desktop应用程序 | Please start Docker Desktop application
pause
exit /b 1
)
REM 检查docker-compose.yml文件是否存在
REM 检查docker-compose.yml文件是否存在 | Check if docker-compose.yml file exists
if not exist "%COMPOSE_FILE%" (
echo 错误: 未找到%COMPOSE_FILE%文件
echo 请确保在正确的目录中运行此脚本
echo 错误 | Error: 未找到%COMPOSE_FILE%文件 | %COMPOSE_FILE% file not found
echo 请确保在正确的目录中运行此脚本 | Please make sure you are running this script in the correct directory
pause
exit /b 1
)
REM 检查Docker Compose命令
REM 检查Docker Compose命令 | Check Docker Compose command
where docker-compose >nul 2>nul
if %ERRORLEVEL% EQU 0 (
set COMPOSE_CMD=docker-compose
) else (
echo 尝试使用新的docker compose命令...
echo 尝试使用新的docker compose命令... | Trying to use new docker compose command...
docker compose version >nul 2>nul
if %ERRORLEVEL% EQU 0 (
set COMPOSE_CMD=docker compose
) else (
echo 错误: 未找到Docker Compose命令
echo 请确保Docker Desktop已正确安装
echo 错误 | Error: 未找到Docker Compose命令 | Docker Compose command not found
echo 请确保Docker Desktop已正确安装 | Please make sure Docker Desktop is properly installed
pause
exit /b 1
)
)
REM 设置Docker BuildKit环境变量
REM 设置Docker BuildKit环境变量 | Set Docker BuildKit environment variables
set DOCKER_BUILDKIT=1
set COMPOSE_DOCKER_CLI_BUILD=1
echo 启用Docker BuildKit加速构建...
echo 启用Docker BuildKit加速构建... | Enabling Docker BuildKit to accelerate build...
REM 清理缓存(如果指定)
REM 清理缓存(如果指定) | Clean cache (if specified)
if %CLEAN_CACHE% EQU 1 (
echo 清理缓存目录...
echo 清理缓存目录... | Cleaning cache directory...
if exist "%CACHE_DIR%" rmdir /s /q "%CACHE_DIR%"
)
REM 创建缓存目录
REM 创建缓存目录 | Create cache directory
if not exist "%CACHE_DIR%" (
echo 创建缓存目录...
echo 创建缓存目录... | Creating cache directory...
mkdir "%CACHE_DIR%"
)
REM 添加构建时间标记
REM 添加构建时间标记 | Add build time tag
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YEAR=%dt:~0,4%"
set "MONTH=%dt:~4,2%"
@@ -115,33 +115,33 @@ set "MINUTE=%dt:~10,2%"
set "BUILD_TIME=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%"
set "BUILD_ARGS=%BUILD_ARGS% --build-arg BUILD_TIME=%BUILD_TIME%"
REM 构建Docker镜像
echo 开始构建Docker镜像...
REM 构建Docker镜像 | Build Docker image
echo 开始构建Docker镜像... | Starting to build Docker image...
if "%SERVICE%"=="" (
if %REBUILD% EQU 1 (
echo 强制重新构建所有服务...
echo 强制重新构建所有服务... | Force rebuilding all services...
%COMPOSE_CMD% build --no-cache %BUILD_ARGS%
) else (
%COMPOSE_CMD% build %BUILD_ARGS%
)
) else (
if %REBUILD% EQU 1 (
echo 强制重新构建服务 %SERVICE%...
echo 强制重新构建服务 %SERVICE%... | Force rebuilding service %SERVICE%...
%COMPOSE_CMD% build --no-cache %BUILD_ARGS% %SERVICE%
) else (
echo 构建服务 %SERVICE%...
echo 构建服务 %SERVICE%... | Building service %SERVICE%...
%COMPOSE_CMD% build %BUILD_ARGS% %SERVICE%
)
)
if %ERRORLEVEL% EQU 0 (
echo Docker镜像构建成功
echo 构建时间: %BUILD_TIME%
echo 可以使用以下命令启动容器:
echo Docker镜像构建成功 | Docker image build successful!
echo 构建时间 | Build time: %BUILD_TIME%
echo 可以使用以下命令启动容器: | You can use the following command to start the container:
echo %COMPOSE_CMD% up -d
) else (
echo Docker镜像构建失败请检查错误信息。
echo Docker镜像构建失败请检查错误信息。 | Docker image build failed, please check error messages.
)
pause
pause

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# 设置配置变量
# 设置配置变量 | Set configuration variables
CACHE_DIR=".docker-cache/pip"
BUILD_ARGS="--build-arg BUILDKIT_INLINE_CACHE=1"
COMPOSE_FILE="docker-compose.yml"
@@ -8,7 +8,7 @@ CLEAN_CACHE=0
REBUILD=0
SERVICE=""
# 解析命令行参数
# 解析命令行参数 | Parse command line arguments
while [[ $# -gt 0 ]]; do
case "$1" in
--clean)
@@ -24,127 +24,127 @@ while [[ $# -gt 0 ]]; do
shift 2
;;
--help)
echo "用法: ./build_docker.sh [选项]"
echo "选项:"
echo " --clean 清理缓存目录"
echo " --rebuild 强制重新构建镜像"
echo " --service 指定要构建的服务名称"
echo " --help 显示此帮助信息"
echo "用法 | Usage: ./build_docker.sh [选项 | options]"
echo "选项 | Options:"
echo " --clean 清理缓存目录 | Clean cache directory"
echo " --rebuild 强制重新构建镜像 | Force rebuild image"
echo " --service 指定要构建的服务名称 | Specify service name to build"
echo " --help 显示此帮助信息 | Show this help message"
exit 0
;;
*)
echo "未知选项: $1"
echo "使用 --help 查看帮助"
echo "未知选项 | Unknown option: $1"
echo "使用 --help 查看帮助 | Use --help to see help"
exit 1
;;
esac
done
# 检测操作系统类型
# 检测操作系统类型 | Detect operating system type
OS_TYPE=$(uname -s)
echo "检测到操作系统: $OS_TYPE"
echo "检测到操作系统 | Detected OS: $OS_TYPE"
# 检查Docker是否安装
# 检查Docker是否安装 | Check if Docker is installed
if ! command -v docker &> /dev/null; then
echo "错误: Docker未安装"
echo "请先安装Docker: https://docs.docker.com/get-docker/"
echo "错误 | Error: Docker未安装 | Docker not installed"
echo "请先安装Docker | Please install Docker first: https://docs.docker.com/get-docker/"
exit 1
fi
# 检查Docker是否运行
# 检查Docker是否运行 | Check if Docker is running
if ! docker info &> /dev/null; then
echo "错误: Docker未运行"
echo "请启动Docker服务"
echo "错误 | Error: Docker未运行 | Docker not running"
echo "请启动Docker服务 | Please start Docker service"
exit 1
fi
# 检查docker-compose.yml文件是否存在
# 检查docker-compose.yml文件是否存在 | Check if docker-compose.yml file exists
if [ ! -f "$COMPOSE_FILE" ]; then
echo "错误: 未找到$COMPOSE_FILE文件"
echo "请确保在正确的目录中运行此脚本"
echo "错误 | Error: 未找到$COMPOSE_FILE文件 | $COMPOSE_FILE file not found"
echo "请确保在正确的目录中运行此脚本 | Please make sure you are running this script in the correct directory"
exit 1
fi
# 设置Docker BuildKit环境变量
# 设置Docker BuildKit环境变量 | Set Docker BuildKit environment variables
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
echo "启用Docker BuildKit加速构建..."
echo "启用Docker BuildKit加速构建... | Enabling Docker BuildKit to accelerate build..."
# 清理缓存(如果指定)
# 清理缓存(如果指定) | Clean cache (if specified)
if [ $CLEAN_CACHE -eq 1 ]; then
echo "清理缓存目录..."
echo "清理缓存目录... | Cleaning cache directory..."
rm -rf "$CACHE_DIR"
fi
# 创建缓存目录
# 创建缓存目录 | Create cache directory
mkdir -p "$CACHE_DIR"
# 添加构建时间标记
# 添加构建时间标记 | Add build time tag
BUILD_TIME=$(date +"%Y%m%d_%H%M%S")
BUILD_ARGS="$BUILD_ARGS --build-arg BUILD_TIME=$BUILD_TIME"
# 获取脚本所在目录
# 获取脚本所在目录 | Get script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 获取项目根目录(脚本所在目录的父目录)
# 获取项目根目录(脚本所在目录的父目录) | Get project root directory (parent directory of script directory)
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo "脚本目录: $SCRIPT_DIR"
echo "项目根目录: $PROJECT_ROOT"
echo "脚本目录 | Script directory: $SCRIPT_DIR"
echo "项目根目录 | Project root directory: $PROJECT_ROOT"
# 切换到项目根目录
# 切换到项目根目录 | Change to project root directory
cd "$PROJECT_ROOT"
# 检查Docker Compose命令
# 检查Docker Compose命令 | Check Docker Compose command
if command -v docker-compose &> /dev/null; then
COMPOSE_CMD="docker-compose"
echo "使用 docker-compose 命令"
echo "使用 docker-compose 命令 | Using docker-compose command"
elif docker compose version &> /dev/null; then
COMPOSE_CMD="docker compose"
echo "使用 docker compose 命令"
echo "使用 docker compose 命令 | Using docker compose command"
else
echo "错误: 未找到Docker Compose命令"
echo "请安装Docker Compose: https://docs.docker.com/compose/install/"
echo "错误 | Error: 未找到Docker Compose命令 | Docker Compose command not found"
echo "请安装Docker Compose | Please install Docker Compose: https://docs.docker.com/compose/install/"
exit 1
fi
# 检测CPU核心数用于并行构建
# 检测CPU核心数用于并行构建 | Detect CPU cores for parallel build
CPU_CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2)
if [ $CPU_CORES -gt 2 ]; then
PARALLEL_FLAG="--parallel"
echo "检测到${CPU_CORES}个CPU核心启用并行构建..."
echo "检测到${CPU_CORES}个CPU核心启用并行构建... | Detected ${CPU_CORES} CPU cores, enabling parallel build..."
else
PARALLEL_FLAG=""
fi
# 构建命令基础部分
# 构建命令基础部分 | Base part of build command
BUILD_CMD="$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" build $PARALLEL_FLAG --build-arg BUILDKIT_INLINE_CACHE=1"
# 根据操作系统类型执行不同的命令
# 根据操作系统类型执行不同的命令 | Execute different commands based on OS type
if [[ "$OS_TYPE" == "Darwin" ]]; then
# macOS
echo "在macOS上构建Docker镜像..."
echo "在macOS上构建Docker镜像... | Building Docker image on macOS..."
eval $BUILD_CMD
elif [[ "$OS_TYPE" == "Linux" ]]; then
# Linux
echo "在Linux上构建Docker镜像..."
echo "在Linux上构建Docker镜像... | Building Docker image on Linux..."
eval $BUILD_CMD
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
# Windows
echo "在Windows上构建Docker镜像..."
echo "在Windows上构建Docker镜像... | Building Docker image on Windows..."
eval $BUILD_CMD
else
echo "未知操作系统,尝试使用标准命令构建..."
echo "未知操作系统,尝试使用标准命令构建... | Unknown OS, trying to build with standard command..."
eval $BUILD_CMD
fi
# 检查构建结果
# 检查构建结果 | Check build result
if [ $? -eq 0 ]; then
echo "Docker镜像构建成功"
echo "构建时间: $BUILD_TIME"
echo "可以使用以下命令启动容器:"
echo "Docker镜像构建成功 | Docker image build successful!"
echo "构建时间 | Build time: $BUILD_TIME"
echo "可以使用以下命令启动容器: | You can use the following command to start the container:"
echo "$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" up -d"
else
echo "Docker镜像构建失败请检查错误信息。"
echo "Docker镜像构建失败请检查错误信息。 | Docker image build failed, please check error messages."
exit 1
fi
fi

View File

@@ -4,49 +4,49 @@ services:
context: ..
dockerfile: .container/Dockerfile
args:
# 构建参数
# 构建参数 | Build arguments
BUILDKIT_INLINE_CACHE: 1
# 使用BuildKit加速构建
# 使用BuildKit加速构建 | Use BuildKit to accelerate build
cache_from:
- python:3.10-slim
volumes:
# 挂载.env文件方便配置API密钥
# 挂载.env文件方便配置API密钥 | Mount .env file for easy API key configuration
- ./owl/.env:/app/owl/.env
# 可选:挂载数据目录
# 可选:挂载数据目录 | Optional: Mount data directory
- ./data:/app/data
# 挂载缓存目录,避免重复下载
# 挂载缓存目录,避免重复下载 | Mount cache directories to avoid repeated downloads
- playwright-cache:/root/.cache/ms-playwright
- pip-cache:/root/.pip/cache
environment:
# 可以在这里设置环境变量,覆盖.env文件中的设置
# 可以在这里设置环境变量,覆盖.env文件中的设置 | Set environment variables here to override settings in .env file
- OPENAI_API_KEY=${OPENAI_API_KEY}
# 添加显示相关的环境变量
# 添加显示相关的环境变量 | Add display-related environment variables
- DISPLAY=:99
- PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
# 设置Python不生成.pyc文件减少磁盘IO
# 设置Python不生成.pyc文件减少磁盘IO | Set Python to not generate .pyc files, reduce disk IO
- PYTHONDONTWRITEBYTECODE=1
# 设置Python不缓冲输出方便查看日志
# 设置Python不缓冲输出方便查看日志 | Set Python to not buffer output for easier log viewing
- PYTHONUNBUFFERED=1
# 设置终端颜色
# 设置终端颜色 | Set terminal color
- TERM=xterm-256color
# 启用pip缓存
# 启用pip缓存 | Enable pip cache
- PIP_CACHE_DIR=/root/.pip/cache
ports:
# 如果项目有Web界面可以映射端口
# 如果项目有Web界面可以映射端口 | If the project has a web interface, map ports
- "8000:8000"
# 使用交互模式运行容器
# 使用交互模式运行容器 | Run container in interactive mode
stdin_open: true
tty: true
# 添加共享内存大小,提高浏览器性能
# 添加共享内存大小,提高浏览器性能 | Add shared memory size to improve browser performance
shm_size: 2gb
# 设置资源限制
# 设置资源限制 | Set resource limits
deploy:
resources:
limits:
cpus: '2'
memory: 4G
# 定义持久化卷,用于缓存
# 定义持久化卷,用于缓存 | Define persistent volumes for caching
volumes:
playwright-cache:
pip-cache:
pip-cache: