# data-engineering-day-08 **Repository Path**: linwenjun/data-engineering-day-08 ## Basic Information - **Project Name**: data-engineering-day-08 - **Description**: data-engineering-day-08 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-07-05 - **Last Updated**: 2025-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Alpine 3.22.0 自定义镜像 基于 `alpine:3.22.0` 构建的自定义 Docker 镜像,包含常用工具和示例应用程序。 ## 功能特性 - 基于轻量级的 Alpine Linux 3.22.0 - 预装常用工具:bash, curl, zip, wget, git, nano, htop, sudo - 预装 mysql-client(MySQL 数据库客户端工具) - 预装 Python 3 和 pip(Python 编程环境) - 预装 dcron(定时任务服务)和示例脚本 - 预装 ossutil(阿里云对象存储命令行工具) - 设置了中国时区 (Asia/Shanghai) - 非 root 用户运行,提高安全性 - 支持 sudo 无密码切换到 root 用户 - 自动启动 cron 服务并配置示例定时任务 - Windows 兼容性:自动转换行结尾符(dos2unix) - 包含健康检查 - 简单的 HTTP 服务器示例 ## 项目结构 ``` . ├── Dockerfile # Docker 镜像定义 ├── docker-compose.yml # Docker Compose 配置 ├── app.sh # 示例应用程序 ├── test_build.sh # 构建测试脚本(Linux/macOS) ├── test_build.bat # 构建测试脚本(Windows) ├── .dockerignore # Docker 忽略文件 ├── .gitattributes # Git 行结尾符配置 ├── crontab.example # 示例定时任务配置 ├── scripts/ # 定时任务脚本目录 │ ├── backup_task.sh # 数据备份脚本 │ ├── health_check.py # 系统健康检查脚本 │ └── log_cleanup.sh # 日志清理脚本 ├── data/ # 数据目录(挂载卷) ├── logs/ # 日志目录(挂载卷) └── README.md # 项目说明 ``` ## 快速开始 ### 1. 构建并启动容器 **方法1:使用测试脚本(推荐)** ```bash # 在 Linux/macOS 上 chmod +x test_build.sh ./test_build.sh # 在 Windows 上(Git Bash 或 WSL) bash test_build.sh # 在 Windows 上(CMD 或 PowerShell) test_build.bat ``` **方法2:手动构建** ```bash # 构建镜像并启动容器 docker-compose up --build -d # 查看日志 docker-compose logs -f alpine-app ``` ### 2. 访问应用程序 应用程序会在端口 8080 上启动一个简单的 HTTP 服务器: ```bash # 测试健康检查端点 curl http://localhost:8080 ``` ### 3. 进入容器 ```bash # 进入运行中的容器(默认 appuser 用户) docker-compose exec alpine-app bash # 直接以 root 用户进入容器 docker-compose exec --user root alpine-app bash # 或者使用 docker 命令 docker exec -it alpine-container bash ``` ### 4. 在容器内切换到 root ```bash # 在容器内使用 sudo 切换到 root sudo su - # 或者直接以 root 身份运行命令 sudo your-command # 查看当前用户 whoami ``` ### 5. 使用 mysql-client(MySQL 客户端) ```bash # 连接到 MySQL 数据库 mysql -h hostname -u username -p database_name # 连接到本地 MySQL(如果有的话) mysql -u root -p # 执行 SQL 文件 mysql -h hostname -u username -p database_name < script.sql # 导出数据库 mysqldump -h hostname -u username -p database_name > backup.sql # 查看版本 mysql --version ``` ### 6. 使用 Python 3 ```bash # 查看 Python 版本 python3 --version # 查看 pip 版本 pip3 --version # 安装 Python 包 pip3 install package_name # 运行 Python 脚本 python3 script.py # 启动 Python 交互式解释器 python3 # 安装常用包示例 pip3 install requests beautifulsoup4 pandas # 查看已安装的包 pip3 list # 将已安装包导出到文件 pip3 freeze > requirements.txt # 从文件安装包 pip3 install -r requirements.txt ``` ### 7. 使用定时任务(Cron) 容器启动后会自动启动 cron 服务,并设置了示例定时任务。 ```bash # 查看当前定时任务 sudo crontab -l # 编辑定时任务 sudo crontab -e # 从文件安装定时任务 sudo crontab /path/to/crontab/file # 删除所有定时任务 sudo crontab -r # 查看cron服务状态 sudo ps aux | grep crond ``` #### 内置定时任务脚本 容器包含以下预制的定时任务脚本: - `/app/scripts/backup_task.sh` - 数据备份脚本 - `/app/scripts/health_check.py` - 系统健康检查脚本 - `/app/scripts/log_cleanup.sh` - 日志清理脚本 #### 定时任务示例 ```bash # 每分钟执行 * * * * * echo "$(date): 任务执行" >> /app/logs/task.log # 每5分钟执行健康检查 */5 * * * * /usr/bin/python3 /app/scripts/health_check.py # 每天凌晨2点执行备份 0 2 * * * /app/scripts/backup_task.sh # 每天凌晨3点清理日志 0 3 * * * /app/scripts/log_cleanup.sh # 工作日上午9点执行报告 0 9 * * 1-5 echo "工作日报告" >> /app/logs/daily.log ``` #### 自定义定时任务 1. 创建您的脚本文件: ```bash # 创建自定义脚本 nano /app/scripts/my_task.sh # 设置执行权限 chmod +x /app/scripts/my_task.sh ``` 2. 添加到 crontab: ```bash # 编辑定时任务 sudo crontab -e # 添加您的任务,例如: # 每小时执行一次 0 * * * * /app/scripts/my_task.sh ``` ### 8. 使用 ossutil(阿里云对象存储工具) ```bash # 配置 ossutil ossutil config # 查看帮助 ossutil help # 列出存储桶 ossutil ls # 上传文件 ossutil cp /local/file oss://bucket-name/ # 下载文件 ossutil cp oss://bucket-name/file /local/path/ ``` ## 管理命令 ```bash # 启动服务 docker-compose up -d # 停止服务 docker-compose down # 重建镜像 docker-compose build --no-cache # 查看容器状态 docker-compose ps # 查看日志 docker-compose logs alpine-app # 查看定时任务日志 docker-compose exec alpine-app tail -f /app/logs/cron.log # 查看健康检查日志 docker-compose exec alpine-app tail -f /app/logs/health_check.log # 手动执行定时任务脚本 docker-compose exec alpine-app /app/scripts/health_check.py # 清理资源 docker-compose down -v --rmi all ``` ## 自定义配置 ### 修改端口 在 `docker-compose.yml` 中修改端口映射: ```yaml ports: - "你的端口:8080" ``` ### 添加环境变量 在 `docker-compose.yml` 中添加环境变量: ```yaml environment: - YOUR_VAR=your_value - ANOTHER_VAR=another_value ``` ### 挂载自定义目录 在 `docker-compose.yml` 中添加卷挂载: ```yaml volumes: - ./your-directory:/app/your-directory ``` ## 镜像信息 - **基础镜像**: alpine:3.22.0 - **工作目录**: /app - **用户**: appuser (UID: 1000) - **暴露端口**: 8080 - **时区**: Asia/Shanghai ## 已安装软件包 - bash - Bash shell - curl - 命令行 HTTP 客户端 - zip - 压缩/解压工具 - wget - 文件下载工具 - git - 版本控制系统 - nano - 文本编辑器 - htop - 系统监控工具 - tzdata - 时区数据 - ca-certificates - CA 证书 - netcat-openbsd - 网络工具 - sudo - 权限提升工具 - mysql-client - MySQL 客户端工具 - python3 - Python 3 编程语言 - py3-pip - Python 包管理器 - dcron - 定时任务服务 - dos2unix - 文本格式转换工具 - ossutil - 阿里云对象存储命令行工具 ## 故障排除 ### 容器无法启动 ```bash # 查看详细日志 docker-compose logs alpine-app # 检查容器状态 docker-compose ps ``` ### Windows 兼容性问题 如果在 Windows 系统上遇到 "no such file or directory" 错误,这通常是由于行结尾符不同造成的。 **解决方案1:镜像已内置自动转换** 镜像已经内置了 `dos2unix` 工具,会自动转换行结尾符。重新构建镜像即可: ```bash docker-compose down docker-compose build --no-cache docker-compose up -d ``` **解决方案2:Git 配置(推荐)** 项目已包含 `.gitattributes` 文件,自动处理行结尾符。如果您是新克隆的项目,建议执行: ```bash # 刷新 Git 工作区,重新应用行结尾符设置 git rm --cached -r . git reset --hard # 或者重新克隆项目 git clone ``` 如果需要全局配置 Git: ```bash # 全局配置 git config --global core.autocrlf true # 项目配置 git config core.autocrlf true ``` **解决方案3:手动转换** 如果问题仍然存在,可以在容器内手动转换: ```bash # 进入容器 docker-compose exec alpine-app bash # 手动转换文件 sudo dos2unix /app/app.sh sudo dos2unix /app/scripts/*.sh sudo dos2unix /app/scripts/*.py # 重新设置权限 sudo chmod +x /app/app.sh sudo chmod +x /app/scripts/*.sh sudo chmod +x /app/scripts/*.py ``` ### 端口冲突 如果 8080 端口被占用,修改 `docker-compose.yml` 中的端口映射。 ### 权限问题 确保 `data/` 和 `logs/` 目录有正确的权限: ```bash chmod 755 data logs ``` ## 开发建议 1. 修改 `app.sh` 来定制你的应用程序逻辑 2. 更新 `Dockerfile` 来安装特定的依赖 3. 使用 `docker-compose.override.yml` 进行本地开发配置 4. 定期更新基础镜像以获得安全补丁 ## Windows 用户注意事项 本项目已经优化了 Windows 兼容性: - ✅ **自动转换行结尾符**:Docker 镜像内置 `dos2unix` 工具 - ✅ **Git 配置**:包含 `.gitattributes` 文件自动处理行结尾符 - ✅ **测试脚本**:提供 Windows 专用的 `.bat` 测试脚本 - ✅ **详细文档**:包含完整的 Windows 故障排除指南 如果您在 Windows 上遇到任何问题,请按照故障排除部分的 "Windows 兼容性问题" 章节进行解决。