##后端Dockerfile
# 使用 ASP.NET 运行时镜像(根据项目版本调整)
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
# 设置环境变量(可选)
#ENV ASPNETCORE_ENVIRONMENT=Production
ENV ASPNETCORE_ENVIRONMENT=Development
ENV ASPNETCORE_URLS=http://+:5001
# 暴露端口
EXPOSE 5001
# 复制已编译的文件
COPY bin/Release/net6.0/ /app/
# 设置入口点
ENTRYPOINT ["dotnet", "Myblog.WebApi.dll"]
shell
#!/bin/bash
# 将dockerfile复制过来
cd /var/jenkins_home/workspace/MyBlog/Myblog.WebApi/
#cd /tools/1panel/1panel/apps/jenkins/jenkins/data/workspace/MyBlog/Myblog.WebApi/bin/Release/net6.0/
#cp /tools/1panel/1panel/apps/jenkins/jenkins/data/workspace/Dotnet/Dockerfile ./Dockerfile
cp /var/jenkins_home/workspace/Dotnet/Dockerfile ./Dockerfile
# 指定镜像名和容器名
IMAGE_NAME="myblogimg"
CONTAINER_NAME="myblog"
# 检查并删除已存在的容器
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
echo "删除已存在的容器: $CONTAINER_NAME"
docker rm -f $CONTAINER_NAME
else
echo "容器 $CONTAINER_NAME 不存在"
fi
# 检查并删除已存在的镜像
if [ "$(docker images -q $IMAGE_NAME)" ]; then
echo "删除已存在的镜像: $IMAGE_NAME"
docker rmi -f $IMAGE_NAME
else
echo "镜像 $IMAGE_NAME 不存在"
fi
pwd
# 构建新的 Docker 镜像
echo "构建新的 Docker 镜像: $IMAGE_NAME"
docker build -t $IMAGE_NAME .
# 创建并运行新的 Docker 容器
echo "创建并运行容器: $CONTAINER_NAME"
#docker run -d --name $CONTAINER_NAME --restart=on-failure:5 -p 5001:5001 $IMAGE_NAME
docker run -d \
--name $CONTAINER_NAME \
--restart=on-failure:5 \
-p 5001:5001 \
-v /tools/myblog/logs/:/app/logs/ \
$IMAGE_NAME
前端-后台Dockerfile
FROM nginx:latest
EXPOSE 80
WORKDIR /app
# 替换nginx配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 将第一阶段的静态文件复制到nginx中
RUN rm -rf /usr/share/nginx/html
RUN mkdir /usr/share/nginx/html
COPY dist /usr/share/nginx/html
# 运行
CMD ["nginx", "-g", "daemon off;"]
nginx.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
# 新增下面这句,其他是默认nginx配置
# 解决部分前端框架的路由问题,在浏览器刷新报错404
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
shell
#!/bin/bash
# 将dockerfile复制过来
cd /var/jenkins_home/workspace/BlogWeb-admin-test/
cp /var/jenkins_home/workspace/Dotnet/front_Dockerfile ./Dockerfile
cp /var/jenkins_home/workspace/Dotnet/nginx.conf ./nginx.conf
cp /var/jenkins_home/workspace/Dotnet/front_admin/dist.zip ./dist.zip
unzip -d ./dist dist.zip
# 指定镜像名和容器名
IMAGE_NAME="myblog_web_admin_img"
CONTAINER_NAME="myblog_web_admin"
# 检查并删除已存在的容器
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
echo "删除已存在的容器: $CONTAINER_NAME"
docker rm -f $CONTAINER_NAME
else
echo "容器 $CONTAINER_NAME 不存在"
fi
# 检查并删除已存在的镜像
if [ "$(docker images -q $IMAGE_NAME)" ]; then
echo "删除已存在的镜像: $IMAGE_NAME"
docker rmi -f $IMAGE_NAME
else
echo "镜像 $IMAGE_NAME 不存在"
fi
pwd
# 构建新的 Docker 镜像
echo "构建新的 Docker 镜像: $IMAGE_NAME"
docker build -t $IMAGE_NAME .
# 创建并运行新的 Docker 容器
echo "创建并运行容器: $CONTAINER_NAME"
docker run -d --name $CONTAINER_NAME --restart=on-failure:5 -p 3000:80 $IMAGE_NAME
echo "构建成功,删除文件"
rm -rf ./dist
rm ./dist.zip
前端-前台Dockerfile和后台一致
shell
#!/bin/bash
# 将dockerfile复制过来
cd /var/jenkins_home/workspace/BlogWeb-test/
cp /var/jenkins_home/workspace/Dotnet/front_Dockerfile ./Dockerfile
cp /var/jenkins_home/workspace/Dotnet/nginx.conf ./nginx.conf
cp /var/jenkins_home/workspace/Dotnet/front_web/dist.zip ./dist.zip
unzip -d ./dist dist.zip
# 指定镜像名和容器名
IMAGE_NAME="myblog_web_img"
CONTAINER_NAME="myblog_web"
# 检查并删除已存在的容器
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
echo "删除已存在的容器: $CONTAINER_NAME"
docker rm -f $CONTAINER_NAME
else
echo "容器 $CONTAINER_NAME 不存在"
fi
# 检查并删除已存在的镜像
if [ "$(docker images -q $IMAGE_NAME)" ]; then
echo "删除已存在的镜像: $IMAGE_NAME"
docker rmi -f $IMAGE_NAME
else
echo "镜像 $IMAGE_NAME 不存在"
fi
pwd
# 构建新的 Docker 镜像
echo "构建新的 Docker 镜像: $IMAGE_NAME"
docker build -t $IMAGE_NAME .
# 创建并运行新的 Docker 容器
echo "创建并运行容器: $CONTAINER_NAME"
docker run -d --name $CONTAINER_NAME --restart=on-failure:5 -p 3001:80 $IMAGE_NAME

...