commit 0b8b8c21e3427974aa862c1eb2883c57f05424a8 Author: 孙小云 Date: Wed May 14 16:14:57 2025 +0800 first diff --git a/environment.sh b/environment.sh new file mode 100644 index 0000000..d3e1b27 --- /dev/null +++ b/environment.sh @@ -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 + diff --git a/imagebuild/Dockefile b/imagebuild/Dockefile new file mode 100644 index 0000000..57a7609 --- /dev/null +++ b/imagebuild/Dockefile @@ -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"] +~ \ No newline at end of file diff --git a/imagebuild/build.sh b/imagebuild/build.sh new file mode 100644 index 0000000..c3b727f --- /dev/null +++ b/imagebuild/build.sh @@ -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 +~ \ No newline at end of file diff --git a/init/1.network.sh b/init/1.network.sh new file mode 100755 index 0000000..ef6771e --- /dev/null +++ b/init/1.network.sh @@ -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 \ No newline at end of file diff --git a/init/2.volumn.sh b/init/2.volumn.sh new file mode 100755 index 0000000..eb9d181 --- /dev/null +++ b/init/2.volumn.sh @@ -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 + + \ No newline at end of file diff --git a/init/3.mysql.sh b/init/3.mysql.sh new file mode 100755 index 0000000..49aed31 --- /dev/null +++ b/init/3.mysql.sh @@ -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 \ No newline at end of file diff --git a/init/4.redis.sh b/init/4.redis.sh new file mode 100755 index 0000000..3272a65 --- /dev/null +++ b/init/4.redis.sh @@ -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 \ No newline at end of file diff --git a/init/5.mqtt.sh b/init/5.mqtt.sh new file mode 100755 index 0000000..eb97d9f --- /dev/null +++ b/init/5.mqtt.sh @@ -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 \ No newline at end of file diff --git a/project.md b/project.md new file mode 100644 index 0000000..884fdb0 --- /dev/null +++ b/project.md @@ -0,0 +1,9 @@ +## 你是一个容器专家,需要协助为做容器化部署 +### imagebuild 文件夹是放在构建服务器上的 +### init 文件夹上放着需要部署docker应用的应用服务器上的 +### 在构建服务器上,通过执行 build.sh 服务名 jar包名 这样去生成镜像 +### 应用服务器上需要执行init里面的脚本去生成docker +### 我希望init中的每个服务都是通过一个脚本去启动,这些服务在网络环境中 +#### 1.network.sh 是为了生成网络环境 +#### 2.volumn.sh 是为了建立volumn,给服务用 +### 在非docker swarm的环境中运行,在单机docker环境中运行 \ No newline at end of file diff --git a/temp b/temp new file mode 100644 index 0000000..c31bf7f --- /dev/null +++ b/temp @@ -0,0 +1 @@ +帮我更新2.mysql.sh中的脚本,在环境中创建一个mysql的容器,需要在上面指定的网络中,root密码通过环境变量指定,映射到主机的端口也通过 \ No newline at end of file