This commit is contained in:
孙小云 2025-05-14 16:14:57 +08:00
commit 0b8b8c21e3
10 changed files with 217 additions and 0 deletions

41
environment.sh Normal file
View File

@ -0,0 +1,41 @@
#!/bin/bash
# 定基本环境变量并导出
export DOMAIN=bazhong
export NETWORK="swarm_network_$DOMAIN"
export REGISTRY=registry.t-aaron.com
#MySql 端口暴露出来方便访问
export MYSQL_PORT=3308
export MYSQL_ROOT_PASSWORD=tuoheng2024
export MYSQL_IMAGE=${REGISTRY}/tuoheng/mysql:8.0.25
export MYSQL_DATA=${NETWORK}_mysql_data
export MYSQL_NAME=MYSQL_${DOMAIN}
export MYSQL_MEMORY=1g
export REDIS_PORT=6380
export REDIS_IMAGE=${REGISTRY}/tuoheng/redis:latest
export REDIS_DATA=${NETWORK}_redis_data
export REDIS_NAME=REDIS_${DOMAIN}
export REDIS_MEMORY=512m
export MQTT_PORT=1883
export MQTT_WS_PORT=9001
export MQTT_IMAGE=${REGISTRY}/tuoheng/eclipse-mosquitto:latest
export MQTT_NAME=MQTT_${DOMAIN}
export MQTT_MEMORY=512m
export SKY_AOP="sky-oap:11800"
#主机INGRESS_PORT 映射到容器80 INGRESS_SSL_PORT 映射到容器 443
export INGRESS_PORT=80
#export INGRESS_SSL_PORT=443
export OIDC_URL=https://oidc-$DOMAIN-software.t-aaron.com
export OIDC_PORT=8090
export XXL_JOB=http://xxljob:8080/xxl-job-admin
#固定基本配置
export TZ=Asia/Shanghai
export SPRING_CLOUD_CONSUL_HOST=consul
export SPRING_CLOUD_CONSUL_PORT=8500

22
imagebuild/Dockefile Normal file
View File

@ -0,0 +1,22 @@
# 使用一个基础镜像
#FROM openjdk:11-jre-slim
FROM tuoheng/centos:base
USER th
# 定义构建参数
ARG SW_APP_NAME
ARG SW_SKY_AOP
# 设置工作目录
WORKDIR /data/java/tuoheng
COPY apache-skywalking-java-agent-9.0.0.tgz .
RUN tar -zxvf apache-skywalking-java-agent-9.0.0.tgz
#复制应用程序到容器中
COPY tuoheng.jar .
# 设置环境变量
ENV PATH="/usr/java/jdk/bin:${PATH}"
ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES="${SW_SKY_AOP}" \
SW_AGENT_NAME="${SW_APP_NAME}"
#暴露应用程序的端口
#EXPOSE 8090
# 运行应用程序
ENTRYPOINT ["java", "-Dfile.encoding=UTF-8","-javaagent:/data/java/tuoheng/skywalking-agent/skywalking-agent.jar","-jar","tuoheng.jar"]
~

24
imagebuild/build.sh Normal file
View File

@ -0,0 +1,24 @@
#!/bin/bash
# This script builds the Docker image
# 读取第一个参数
if [ $# -ne 2 ]; then
echo "错误:调用该脚本时必须传入 2 个参数。"
exit 1
fi
echo "服务名: $1 Java包: $2"
rm tuoheng.jar
cp $2 tuoheng.jar
source ../environment.sh
export APP_NAME=$1
#docker service rm $APP_NAME
sleep 5
docker container prune -f
sleep 5
cp /data/java/apache-skywalking-java-agent-9.0.0.tgz apache-skywalking-java-agent-9.0.0.tgz
docker image rm $REGISTRY/tuoheng/$APP_NAME:$DOMAIN
docker build --no-cache \
--build-arg SW_APP_NAME=$APP_NAME \
--build-arg SW_SKY_AOP=$SKY_AOP \
-t $REGISTRY/tuoheng/$APP_NAME:$DOMAIN . # 注意末尾的 `.` 表示当前路径
docker push $REGISTRY/tuoheng/$APP_NAME:$DOMAIN
~

7
init/1.network.sh Executable file
View File

@ -0,0 +1,7 @@
source ../environment.sh
if ! docker network inspect ${NETWORK} >/dev/null 2>&1; then
docker network create --driver bridge ${NETWORK}
echo "创建 ${NETWORK} bridge 网络成功"
else
echo "${NETWORK} 网络已存在"
fi

18
init/2.volumn.sh Executable file
View File

@ -0,0 +1,18 @@
source ../environment.sh
if ! docker volume inspect ${MYSQL_DATA} >/dev/null 2>&1; then
docker volume create ${MYSQL_DATA}
echo "创建 ${MYSQL_DATA} 卷成功"
else
echo "${MYSQL_DATA} 卷已存在"
fi
source ../environment.sh
if ! docker volume inspect ${REDIS_DATA} >/dev/null 2>&1; then
docker volume create ${REDIS_DATA}
echo "创建 ${REDIS_DATA} 卷成功"
else
echo "${REDIS_DATA} 卷已存在"
fi

34
init/3.mysql.sh Executable file
View File

@ -0,0 +1,34 @@
source ../environment.sh
if [ -z "$NETWORK" ]; then
echo "错误: 未找到 NETWORK 环境变量"
exit 1
fi
if [ -z "$MYSQL_ROOT_PASSWORD" ]; then
echo "错误: 未找到 MYSQL_ROOT_PASSWORD 环境变量"
exit 1
fi
if [ -z "$MYSQL_PORT" ]; then
echo "错误: 未找到 MYSQL_PORT 环境变量"
exit 1
fi
if docker ps -a | grep -q ${MYSQL_NAME}; then
echo "停止并删除已存在的 MySQL 容器..."
docker stop ${MYSQL_NAME} >/dev/null 2>&1
docker rm ${MYSQL_NAME} >/dev/null 2>&1
fi
docker run -d \
--name ${MYSQL_NAME} \
--network $NETWORK \
-p ${MYSQL_PORT}:3306 \
-e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
-e MYSQL_CHARACTER_SET_SERVER=utf8mb4 \
-e MYSQL_COLLATION_SERVER=utf8mb4_unicode_ci \
-v ${MYSQL_DATA}:/var/lib/mysql \
--memory ${MYSQL_MEMORY} \
--restart unless-stopped \
${MYSQL_IMAGE}
docker ps

30
init/4.redis.sh Executable file
View File

@ -0,0 +1,30 @@
source ../environment.sh
if [ -z "$NETWORK" ]; then
echo "错误: 未找到 NETWORK 环境变量"
exit 1
fi
if [ -z "$REDIS_PORT" ]; then
echo "错误: 未找到 REDIS_PORT 环境变量"
exit 1
fi
if [ -z "$REDIS_DATA" ]; then
echo "错误: 未找到 REDIS_DATA 环境变量"
exit 1
fi
if docker ps -a | grep -q ${REDIS_NAME}; then
echo "停止并删除已存在的 REDIS 容器..."
docker stop ${REDIS_NAME} >/dev/null 2>&1
docker rm ${REDIS_NAME} >/dev/null 2>&1
fi
docker run -d \
--name ${REDIS_NAME} \
--network $NETWORK \
-p ${REDIS_PORT}:6379 \
-v ${REDIS_DATA}:/data \
--memory ${REDIS_MEMORY} \
--restart unless-stopped \
${REDIS_IMAGE}
docker ps

31
init/5.mqtt.sh Executable file
View File

@ -0,0 +1,31 @@
source ../environment.sh
if [ -z "$NETWORK" ]; then
echo "错误: 未找到 NETWORK 环境变量"
exit 1
fi
if [ -z "$MQTT_PORT" ]; then
echo "错误: 未找到 MQTT_PORT 环境变量"
exit 1
fi
if [ -z "$MQTT_WS_PORT" ]; then
echo "错误: 未找到 MQTT_WS_PORT 环境变量"
exit 1
fi
if docker ps -a | grep -q ${MQTT_NAME}; then
echo "停止并删除已存在的 MQTT 容器..."
docker stop ${MQTT_NAME} >/dev/null 2>&1
docker rm ${MQTT_NAME} >/dev/null 2>&1
fi
docker run -d \
--name ${MQTT_NAME} \
--network $NETWORK \
-p ${MQTT_PORT}:1883 \
-p ${MQTT_WS_PORT}:9001 \
--memory ${MQTT_MEMORY} \
--restart unless-stopped \
${MQTT_IMAGE}
docker ps

9
project.md Normal file
View File

@ -0,0 +1,9 @@
## 你是一个容器专家,需要协助为做容器化部署
### imagebuild 文件夹是放在构建服务器上的
### init 文件夹上放着需要部署docker应用的应用服务器上的
### 在构建服务器上,通过执行 build.sh 服务名 jar包名 这样去生成镜像
### 应用服务器上需要执行init里面的脚本去生成docker
### 我希望init中的每个服务都是通过一个脚本去启动,这些服务在网络环境中
#### 1.network.sh 是为了生成网络环境
#### 2.volumn.sh 是为了建立volumn,给服务用
### 在非docker swarm的环境中运行,在单机docker环境中运行

1
temp Normal file
View File

@ -0,0 +1 @@
帮我更新2.mysql.sh中的脚本,在环境中创建一个mysql的容器需要在上面指定的网络中root密码通过环境变量指定映射到主机的端口也通过