签入版本
This commit is contained in:
parent
1dcbcc83f1
commit
d646fd4fbf
@ -1,56 +1,121 @@
|
||||
# Docker Compose 文件版本定义
|
||||
# 3.7 版本支持丰富的部署配置和资源限制功能
|
||||
version: '3.7'
|
||||
|
||||
# 应用服务
|
||||
# 服务定义块,包含所有需要部署的容器服务
|
||||
services:
|
||||
# 后端服务
|
||||
xiaomayi-elevue:
|
||||
# 镜像
|
||||
image: 192.168.10.102:8001/xiaomayi/xiaomayi-elevue:${VERSION:-latest}
|
||||
# 容器名
|
||||
container_name: xiaomayi-elevue
|
||||
# 重启方式
|
||||
# 后端服务 - 小蚂蚁管理系统后端
|
||||
xiaomayi-admin:
|
||||
# 镜像地址:从私有Harbor仓库拉取镜像
|
||||
# ${VERSION:-latest} 表示使用VERSION环境变量,如果未设置则使用latest标签
|
||||
image: manage.harbor.djangoadmin.cn/xiaomayi/xiaomayi-admin:${VERSION:-latest}
|
||||
|
||||
# 容器名称:指定容器的名称,便于管理和识别
|
||||
container_name: xiaomayi-admin
|
||||
|
||||
# 重启策略:always表示容器退出时总是自动重启
|
||||
# 确保服务在异常退出后能够自动恢复
|
||||
restart: always
|
||||
# 网络模式
|
||||
|
||||
# 网络模式:host表示使用主机网络模式
|
||||
# 容器直接使用宿主机的网络栈,性能更好,端口直接暴露在主机上
|
||||
network_mode: host
|
||||
# 端口映射
|
||||
|
||||
# 端口映射:将容器内的8081端口映射到主机的8081端口
|
||||
# 格式:主机端口:容器端口
|
||||
ports:
|
||||
- 8081:8081
|
||||
|
||||
# 数据卷挂载:将主机文件或目录挂载到容器内
|
||||
volumes:
|
||||
# 挂载主机hosts文件到容器内(只读模式)
|
||||
# 用于容器内的域名解析,与主机保持一致
|
||||
- /etc/hosts:/etc/hosts:ro
|
||||
|
||||
# 挂载上传目录:将当前目录下的upload目录挂载到容器的/opt/apps/upload
|
||||
# 用于持久化存储上传的文件
|
||||
- $PWD/upload:/opt/apps/upload
|
||||
# 发布
|
||||
|
||||
# 挂载包目录:将当前目录下的package目录挂载到容器的/opt/apps/package
|
||||
# 用于存储应用程序包或其他资源文件
|
||||
- $PWD/package:/opt/apps/package
|
||||
|
||||
# 部署配置:定义资源限制和预留(Docker Swarm模式下的配置)
|
||||
# 在单机Docker Compose中也会被部分支持
|
||||
deploy:
|
||||
resources:
|
||||
# 资源限制:容器最多可以使用的资源量
|
||||
limits:
|
||||
cpus: '2'
|
||||
memory: 1.5G
|
||||
cpus: '2' # 最多使用2个CPU核心
|
||||
memory: 1.5G # 最多使用1.5GB内存
|
||||
# 资源预留:保证容器至少获得的资源量
|
||||
reservations:
|
||||
cpus: '0.25'
|
||||
memory: 500M
|
||||
# 前端服务
|
||||
xiaomayi-elevue-web:
|
||||
# 镜像
|
||||
image: 192.168.10.102:8001/xiaomayi/xiaomayi-elevue-web:${VERSION:-latest}
|
||||
# 容器名
|
||||
container_name: xiaomayi-elevue-web
|
||||
# 重启方式
|
||||
cpus: '0.25' # 至少保留0.25个CPU核心
|
||||
memory: 500M # 至少保留500MB内存
|
||||
|
||||
# 前端服务 - 小蚂蚁管理系统前端
|
||||
xiaomayi-web2:
|
||||
# 镜像地址:前端服务的Docker镜像
|
||||
image: manage.harbor.djangoadmin.cn/xiaomayi/xiaomayi-web2:${VERSION:-latest}
|
||||
|
||||
# 容器名称:前端服务容器名称
|
||||
container_name: xiaomayi-web2
|
||||
|
||||
# 重启策略:总是自动重启
|
||||
restart: always
|
||||
# 网络模式
|
||||
|
||||
# 网络模式:使用主机网络模式
|
||||
network_mode: host
|
||||
# 端口映射
|
||||
|
||||
# 端口映射:前端服务监听8082端口
|
||||
ports:
|
||||
- 8082:8082
|
||||
|
||||
# 数据卷挂载
|
||||
volumes:
|
||||
# 挂载主机hosts文件(只读)
|
||||
- /etc/hosts:/etc/hosts:ro
|
||||
- $PWD/upload:/opt/apps/upload
|
||||
# 发布
|
||||
|
||||
# 挂载上传目录(读写模式)
|
||||
# :rw 表示读写权限(默认模式,显式声明更清晰)
|
||||
- $PWD/upload:/opt/apps/upload:rw
|
||||
|
||||
# 挂载包目录(读写模式)
|
||||
- $PWD/package:/opt/apps/package:rw
|
||||
|
||||
# 环境变量:设置容器内的环境变量
|
||||
environment:
|
||||
# 语言设置:设置为英文UTF-8编码
|
||||
- LANG=en_US.UTF-8
|
||||
|
||||
# 本地化设置:全部使用英文UTF-8
|
||||
- LC_ALL=en_US.UTF-8
|
||||
|
||||
# Java虚拟机参数:设置文件编码为UTF-8
|
||||
# 确保中文等特殊字符正确处理
|
||||
- JAVA_OPTS=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
|
||||
|
||||
# 部署配置:资源限制和预留
|
||||
deploy:
|
||||
resources:
|
||||
# 资源上限
|
||||
limits:
|
||||
cpus: '2'
|
||||
memory: 1.5G
|
||||
cpus: '2' # 最多2个CPU核心
|
||||
memory: 1.5G # 最多1.5GB内存
|
||||
# 资源保障
|
||||
reservations:
|
||||
cpus: '0.25'
|
||||
memory: 500M
|
||||
cpus: '0.25' # 至少0.25个CPU核心
|
||||
memory: 500M # 至少500MB内存
|
||||
|
||||
# 注意:该配置文件中使用了以下特殊配置:
|
||||
# 1. network_mode: host - 主机网络模式,容器直接使用主机网络
|
||||
# 2. ${VERSION:-latest} - 环境变量替换,支持动态版本控制
|
||||
# 3. deploy.resources - Docker Swarm模式的资源管理,在单机模式下也有部分效果
|
||||
# 4. 多目录挂载 - 实现数据持久化和主机-容器文件共享
|
||||
# 5. 环境变量设置 - 确保应用程序的编码和语言环境正确
|
||||
|
||||
# 使用说明:
|
||||
# 1. 部署命令:VERSION=1.2.0 docker-compose up -d
|
||||
# 2. 查看日志:docker-compose logs -f
|
||||
# 3. 停止服务:docker-compose down
|
||||
# 4. 更新服务:VERSION=1.2.1 docker-compose up -d
|
||||
167
scripts-file/deploy_env copy.sh
Normal file
167
scripts-file/deploy_env copy.sh
Normal file
@ -0,0 +1,167 @@
|
||||
#!/bin/bash
|
||||
# 设置脚本执行选项:
|
||||
# -e: 遇到错误立即退出
|
||||
# -u: 遇到未定义变量报错
|
||||
# -a: 自动导出所有变量(set -a 表示自动导出,set +a 表示关闭自动导出)
|
||||
set -a
|
||||
|
||||
# 检测操作系统类型并加载环境变量文件
|
||||
# 判断是否为 RedHat 或 Rocky Linux 系统
|
||||
if [ -f /etc/redhat-release ] || [ -f /etc/rocky-release ]; then
|
||||
# 在 RedHat 系系统上使用 source 命令加载 .env 环境变量文件
|
||||
source ./.env
|
||||
# 判断是否为 Debian/Ubuntu 系统(基于LSB标准)
|
||||
elif [ -f /etc/lsb-release ]; then
|
||||
# 在 Debian 系系统上使用 . 命令加载 .env 环境变量文件
|
||||
. ./.env
|
||||
else
|
||||
# 不支持的操作系统提示
|
||||
echo "Unsupported OS"
|
||||
exit 1 # 退出脚本,返回错误码
|
||||
fi
|
||||
|
||||
# 关闭自动导出变量模式
|
||||
set +a
|
||||
|
||||
# 定义变量
|
||||
schema="https://" # 协议方案,默认为HTTPS
|
||||
serverName=$2 # 第二个参数:服务名称(如 xiaomayi-admin)
|
||||
tag=$3 # 第三个参数:镜像标签(如 prod-31)
|
||||
|
||||
# 函数:显示脚本使用说明和描述信息
|
||||
desc() {
|
||||
clear # 清屏
|
||||
echo "==========================================================="
|
||||
echo "Deploy Containter" # 脚本用途:部署容器
|
||||
echo "==========================================================="
|
||||
echo "version 0.1" # 脚本版本号
|
||||
echo "deploy: deploy containter" # 部署命令用法
|
||||
echo "delete: delete containter" # 删除命令用法
|
||||
echo ""
|
||||
echo "==========================================================="
|
||||
echo press any key to continue && read TEMP && echo ok.. # 等待用户按键继续
|
||||
}
|
||||
|
||||
# 函数:获取指定容器的镜像名称
|
||||
list_image() {
|
||||
# 使用 docker inspect 命令获取容器的镜像名称
|
||||
# --format="{{.Config.Image}}" 指定输出格式为镜像名称
|
||||
image_id=`docker inspect --format="{{.Config.Image}}" ${serverName}`
|
||||
}
|
||||
|
||||
# 函数:获取指定容器的进程ID(容器ID)
|
||||
list_process() {
|
||||
# 使用 docker inspect 命令获取容器的完整ID
|
||||
# --format="{{.Id}}" 指定输出格式为容器ID
|
||||
process_id=`docker inspect --format="{{.Id}}" ${serverName}`
|
||||
}
|
||||
|
||||
# 函数:从Docker仓库拉取镜像
|
||||
pull_image() {
|
||||
echo "----------------"
|
||||
echo "Pull Image" # 拉取镜像阶段开始
|
||||
echo "----------------"
|
||||
|
||||
# 构建完整的镜像名称
|
||||
# 格式:仓库URL/命名空间/服务名称
|
||||
imageName="${DOCKER_REGISTRY_URL}/${DOCKER_REGISTRYURL_NAMESPACE}/${serverName}"
|
||||
|
||||
# 登录到Docker仓库(使用密码管道方式,避免密码明文出现在命令行历史中)
|
||||
echo "$DOCKER_PASSWORD" | docker login --username=${DOCKER_USERNAME} --password-stdin ${DOCKER_REGISTRY_URL}
|
||||
|
||||
# 拉取指定标签的镜像
|
||||
docker pull "${imageName}:${tag}"
|
||||
echo "" # 输出空行
|
||||
}
|
||||
|
||||
# 函数:运行镜像(部署容器)
|
||||
deploy_image() {
|
||||
echo "----------------"
|
||||
echo "Deploy Image" # 部署镜像阶段开始
|
||||
echo "----------------"
|
||||
|
||||
# 设置版本环境变量,供docker-compose使用
|
||||
export VERSION=${tag}
|
||||
|
||||
# 使用docker compose启动服务(后台模式)
|
||||
# -d: 后台运行容器
|
||||
# ${serverName}: 只启动指定的服务
|
||||
docker compose up -d ${serverName}
|
||||
echo "" # 输出空行
|
||||
}
|
||||
|
||||
# 函数:停止并删除容器和镜像
|
||||
delete_image() {
|
||||
echo "----------------"
|
||||
echo "Delete Image" # 删除镜像阶段开始
|
||||
echo "----------------"
|
||||
|
||||
# 获取当前容器的镜像信息和进程信息
|
||||
list_image
|
||||
list_process
|
||||
|
||||
# 检查镜像是否存在
|
||||
if [ "$image_id" != "" ] ; then
|
||||
# 检查容器进程是否存在
|
||||
if [ "$process_id" != "" ] ; then
|
||||
# 停止正在运行的容器
|
||||
echo "Stopping container: $process_id"
|
||||
docker stop $process_id
|
||||
|
||||
# 删除已停止的容器
|
||||
echo "Removing container: $process_id"
|
||||
docker rm $process_id
|
||||
|
||||
# 强制删除镜像(即使有依赖也强制删除)
|
||||
echo "Removing image: $image_id"
|
||||
docker rmi --force $image_id
|
||||
else
|
||||
# 如果容器不存在,只删除镜像
|
||||
echo "Removing image: $image_id"
|
||||
docker rmi --force $image_id
|
||||
fi
|
||||
else
|
||||
echo "No image found for: ${serverName}"
|
||||
fi
|
||||
echo "" # 输出空行
|
||||
}
|
||||
|
||||
# 主程序:根据传入的参数执行不同的操作
|
||||
case $1 in
|
||||
"deploy") # 部署操作
|
||||
echo "Starting deployment process for ${serverName}:${tag}"
|
||||
pull_image # 第一步:拉取镜像
|
||||
delete_image # 第二步:删除旧容器和镜像(清理环境)
|
||||
deploy_image # 第三步:部署新容器
|
||||
echo "Deployment completed for ${serverName}:${tag}"
|
||||
;;
|
||||
"delete") # 删除操作
|
||||
echo "Starting deletion process for ${serverName}"
|
||||
delete_image # 删除容器和镜像
|
||||
echo "Deletion completed for ${serverName}"
|
||||
;;
|
||||
*) # 默认情况:显示帮助信息
|
||||
echo "Invalid command: $1"
|
||||
desc # 显示使用说明
|
||||
;;
|
||||
esac
|
||||
|
||||
# 脚本结束
|
||||
|
||||
# 使用示例:
|
||||
# ./deploy_env.sh deploy xiaomayi-admin prod-31
|
||||
# ./deploy_env.sh delete xiaomayi-admin
|
||||
#
|
||||
# 依赖文件:
|
||||
# .env 文件需要包含以下环境变量:
|
||||
# DOCKER_REGISTRY_URL=docker仓库地址
|
||||
# DOCKER_REGISTRYURL_NAMESPACE=命名空间
|
||||
# DOCKER_USERNAME=用户名
|
||||
# DOCKER_PASSWORD=密码
|
||||
#
|
||||
# 功能说明:
|
||||
# 1. 支持多操作系统环境检测
|
||||
# 2. 自动加载环境变量配置
|
||||
# 3. 提供完整的容器部署流程
|
||||
# 4. 支持容器清理和删除
|
||||
# 5. 安全的Docker仓库认证
|
||||
@ -1,99 +1,170 @@
|
||||
#!/bin/bash
|
||||
# 设置脚本执行选项:
|
||||
# -e: 遇到错误立即退出
|
||||
# -u: 遇到未定义变量报错
|
||||
# -a: 自动导出所有变量(set -a 表示自动导出,set +a 表示关闭自动导出)
|
||||
set -a
|
||||
|
||||
# 检测操作系统类型并加载环境变量文件
|
||||
# 判断是否为 RedHat 或 Rocky Linux 系统
|
||||
if [ -f /etc/redhat-release ] || [ -f /etc/rocky-release ]; then
|
||||
# 在 RedHat 系系统上使用 source 命令加载 .env 环境变量文件
|
||||
source ./.env
|
||||
# 判断是否为 Debian/Ubuntu 系统(基于LSB标准)
|
||||
elif [ -f /etc/lsb-release ]; then
|
||||
# 在 Debian 系系统上使用 . 命令加载 .env 环境变量文件
|
||||
. ./.env
|
||||
else
|
||||
# 不支持的操作系统提示
|
||||
echo "Unsupported OS"
|
||||
exit 1 # 退出脚本,返回错误码
|
||||
fi
|
||||
|
||||
# 关闭自动导出变量模式
|
||||
set +a
|
||||
|
||||
schema="https://"
|
||||
serverName=$2
|
||||
tag=$3
|
||||
# 定义变量
|
||||
schema="https://" # 协议方案,默认为HTTPS
|
||||
serverName=$2 # 第二个参数:服务名称(如 xiaomayi-admin)
|
||||
tag=$3 # 第三个参数:镜像标签(如 prod-31)
|
||||
|
||||
# 函数:显示脚本使用说明和描述信息
|
||||
desc() {
|
||||
clear
|
||||
clear # 清屏
|
||||
echo "==========================================================="
|
||||
echo "Deploy Containter"
|
||||
echo "Deploy Containter" # 脚本用途:部署容器
|
||||
echo "==========================================================="
|
||||
echo "version 0.1"
|
||||
echo "deploy: deploy containter"
|
||||
echo "delete: delete containter"
|
||||
echo "version 0.1" # 脚本版本号
|
||||
echo "deploy: deploy containter" # 部署命令用法
|
||||
echo "delete: delete containter" # 删除命令用法
|
||||
echo ""
|
||||
echo "==========================================================="
|
||||
echo press any key to continue && read TEMP && echo ok..
|
||||
echo press any key to continue && read TEMP && echo ok.. # 等待用户按键继续
|
||||
}
|
||||
|
||||
# 函数:获取指定容器的镜像名称
|
||||
list_image() {
|
||||
# 使用 docker inspect 命令获取容器的镜像名称
|
||||
# --format="{{.Config.Image}}" 指定输出格式为镜像名称
|
||||
image_id=`docker inspect --format="{{.Config.Image}}" ${serverName}`
|
||||
}
|
||||
|
||||
# 函数:获取指定容器的进程ID(容器ID)
|
||||
list_process() {
|
||||
# 使用 docker inspect 命令获取容器的完整ID
|
||||
# --format="{{.Id}}" 指定输出格式为容器ID
|
||||
process_id=`docker inspect --format="{{.Id}}" ${serverName}`
|
||||
}
|
||||
|
||||
#pull镜像
|
||||
# 函数:从Docker仓库拉取镜像
|
||||
pull_image() {
|
||||
echo "----------------"
|
||||
echo "Pull Image"
|
||||
echo "Pull Image" # 拉取镜像阶段开始
|
||||
echo "----------------"
|
||||
|
||||
# 构建完整的镜像名称
|
||||
# 格式:仓库URL/命名空间/服务名称
|
||||
imageName="${DOCKER_REGISTRY_URL}/${DOCKER_REGISTRYURL_NAMESPACE}/${serverName}"
|
||||
|
||||
# 登录到Docker仓库(使用密码管道方式,避免密码明文出现在命令行历史中)
|
||||
echo "$DOCKER_PASSWORD" | docker login --username=${DOCKER_USERNAME} --password-stdin ${DOCKER_REGISTRY_URL}
|
||||
|
||||
# 拉取指定标签的镜像
|
||||
docker pull "${imageName}:${tag}"
|
||||
echo ""
|
||||
echo "" # 输出空行
|
||||
}
|
||||
|
||||
#运行镜像
|
||||
# 函数:运行镜像(部署容器)
|
||||
deploy_image() {
|
||||
echo "----------------"
|
||||
echo "Deploy Image"
|
||||
echo "Deploy Image" # 部署镜像阶段开始
|
||||
echo "----------------"
|
||||
|
||||
# 设置版本环境变量,供docker-compose使用
|
||||
export VERSION=${tag}
|
||||
|
||||
# 使用docker compose启动服务(后台模式)
|
||||
# -d: 后台运行容器
|
||||
# ${serverName}: 只启动指定的服务
|
||||
docker compose up -d ${serverName}
|
||||
echo ""
|
||||
echo "" # 输出空行
|
||||
}
|
||||
|
||||
#停掉容器、删除容器、删除镜像
|
||||
# 函数:停止并删除容器和镜像
|
||||
delete_image() {
|
||||
echo "----------------"
|
||||
echo "Delete Image"
|
||||
echo "Delete Image" # 删除镜像阶段开始
|
||||
echo "----------------"
|
||||
|
||||
# 获取当前容器的镜像信息和进程信息
|
||||
list_image
|
||||
list_process
|
||||
|
||||
# 检查镜像是否存在
|
||||
if [ "$image_id" != "" ] ; then
|
||||
# 检查容器进程是否存在
|
||||
if [ "$process_id" != "" ] ; then
|
||||
#停掉容器
|
||||
# 停止正在运行的容器
|
||||
echo "Stopping container: $process_id"
|
||||
docker stop $process_id
|
||||
|
||||
#删除容器
|
||||
# 删除已停止的容器
|
||||
echo "Removing container: $process_id"
|
||||
docker rm $process_id
|
||||
|
||||
#删除镜像
|
||||
# 强制删除镜像(即使有依赖也强制删除)
|
||||
echo "Removing image: $image_id"
|
||||
docker rmi --force $image_id
|
||||
else
|
||||
#删除镜像
|
||||
# 如果容器不存在,只删除镜像
|
||||
echo "Removing image: $image_id"
|
||||
docker rmi --force $image_id
|
||||
fi
|
||||
else
|
||||
echo "No image found for: ${serverName}"
|
||||
fi
|
||||
echo ""
|
||||
echo "" # 输出空行
|
||||
}
|
||||
|
||||
|
||||
# main program
|
||||
# 主程序:根据传入的参数执行不同的操作
|
||||
case $1 in
|
||||
"deploy")
|
||||
pull_image
|
||||
delete_image
|
||||
deploy_image
|
||||
# 部署操作
|
||||
echo "Starting deployment process for ${serverName}:${tag}"
|
||||
pull_image # 第一步:拉取镜像
|
||||
delete_image # 第二步:删除旧容器和镜像(清理环境)
|
||||
deploy_image # 第三步:部署新容器
|
||||
echo "Deployment completed for ${serverName}:${tag}"
|
||||
;;
|
||||
"delete")
|
||||
delete_image
|
||||
# 删除操作
|
||||
echo "Starting deletion process for ${serverName}"
|
||||
delete_image # 删除容器和镜像
|
||||
echo "Deletion completed for ${serverName}"
|
||||
;;
|
||||
*)
|
||||
desc
|
||||
*)
|
||||
# 默认情况:显示帮助信息
|
||||
echo "Invalid command: $1"
|
||||
desc # 显示使用说明
|
||||
;;
|
||||
esac
|
||||
|
||||
# 脚本结束
|
||||
|
||||
# 使用示例:
|
||||
# ./deploy_env.sh deploy xiaomayi-admin prod-31
|
||||
# ./deploy_env.sh delete xiaomayi-admin
|
||||
#
|
||||
# 依赖文件:
|
||||
# .env 文件需要包含以下环境变量:
|
||||
# DOCKER_REGISTRY_URL=docker仓库地址
|
||||
# DOCKER_REGISTRYURL_NAMESPACE=命名空间
|
||||
# DOCKER_USERNAME=用户名
|
||||
# DOCKER_PASSWORD=密码
|
||||
#
|
||||
# 功能说明:
|
||||
# 1. 支持多操作系统环境检测
|
||||
# 2. 自动加载环境变量配置
|
||||
# 3. 提供完整的容器部署流程
|
||||
# 4. 支持容器清理和删除
|
||||
# 5. 安全的Docker仓库认证
|
||||
Loading…
x
Reference in New Issue
Block a user