此为手动打包更新版
发布.net core程序,然后放到linux目录:/data/app/docker_name
一、打包到容器
1、安装docker
2、编写Dockerfile (放到目录:/data/app/docker_name)
1 #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. 2 3 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base 4 WORKDIR /app 5 6 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build 7 WORKDIR /src 8 COPY . . 9 10 RUN apt-get update -y 11 RUN apt-get install -y libgdiplus 12 RUN apt-get clean 13 RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll 14 15 RUN rm -f /etc/localtime && \ 16 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 17 18 ENTRYPOINT ["dotnet", "Api.dll"]
下面内容为安装.net core基础依赖包,可根据自己选择(如果服务器不可访问外网,需要从本地导出image镜像,在服务器导入image镜像)
1 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base 2 WORKDIR /app 3 4 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build 5 WORKDIR /src 6 COPY . .
下面内容为安装libgdiplus,主要作用:由于window上操作图片是Draw,但是linux上没有,此时需要安装libgdiplus,如果不需要可以删掉
1 RUN apt-get update -y 2 RUN apt-get install -y libgdiplus 3 RUN apt-get clean 4 RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
下面内容为同步docker容器内部时间与宿主机时间(不设置会导致相差8小时)
1 RUN rm -f /etc/localtime && \ 2 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、生成镜像
docker build -t docker_name:v1 .
4、运行容器
docker run -dit --name docker_name --add-host www.baidu.com:192.168.1.100 -p 8888:8000 --log-driver json-file --log-opt max-size=5120m --log-opt max-file=2 --restart=always -v /data/app/docker_name:/src:rw docker_name:v1 /bin/bash
-dit 不清楚
–name docker_name 定义docker容器的名称,如果不填会随机分配一个名字,建议还是填一个
–add-host www.baidu.com:192.168.1.100 设置host,如果一切没问题,这个可以不要
-p 8888:8000 设置端口映射,8888为宿主机端口,8000为docker内部端口,含义:访问宿主机8888的时候,相当于访问docker里的8000端口
–log-driver json-file –log-opt max-size=5120m –log-opt max-file=2 –log-opt max-size=5120m为设置日志文件单个大小为 5120M –log-opt max-file=2 设置文件最多为2个,多余的会删掉 (这一步建议根据自己服务器设置,不设置的话会无限增长)
–restart=always 设置会一直重启,重启dockers后会自启动,防止以外终止
-v /data/app/docker_name:/src:rw 服务器文件夹与docker里文件夹映射,含义:宿主机/data/app/docker_name 这个文件夹对应容器里的/src ,容器对这个文件夹具有 rw权限,r : 独 w:写, 重要文件最好都这样,比如用户上传的图片等,防止docker rm docker_name 后丢失
docker_name:v1 image的名称和版本号
/bin/bash 不清楚
5、此时,我们就可以访问 http://127.0.0.1:8888了
二、更新代码
手动更新:(需要执行两个命令)
1、发布程序,需要更新的dll打包到zip
2、将zip上传到/data/app/docker_name
3、解压zip,解压命令: unzip zip_name.zip
4、重启容器,docker restart docker_name
此时最新程序就更新了
脚本更新:(只需要执行一个命令,包含备份和回滚)
准备工作:
1、新建文件夹 /data/bak
2、新建文件夹 /data/bak/docker_name
3、在/data/bak文件夹下新建文件 update.sh 和 bak.sh 两个文件
以下是 update.sh 文件内容
注:第30-32行,第39-41行,请替换成自己需要更新的文件
1 echo "" 2 echo "" 3 echo "" 4 echo "" 5 echo "" 6 echo "------------------------------------------------------------------------------------" 7 echo "需要更新的文件:$1" 8 9 mulu=/data/app 10 11 cd $mulu/bak/docker_name 12 13 echo "解压文件 开始" 14 unzip -o $1 15 16 echo "文件解压 完成" 17 18 19 current_date=`date -d "-1 day" "+%Y%m%d_%H%M"` 20 21 22 echo "备份文件夹名为 :$current_date" 23 24 mkdir $current_date 25 26 echo "创建备份文件夹成功" 27 28 echo "将dll剪切到备份文件夹 start" 29 30 cp $mulu/docker_name/api.dll $mulu/bak/docker_name/$current_date/api.dll 31 cp $mulu/docker_name/api.exe $mulu/bak/docker_name/$current_date/api.exe 32 cp $mulu/docker_name/api.pdb $mulu/bak/docker_name/$current_date/api.pdb 33 34 echo "将dll剪切到备份文件夹 end" 35 36 37 echo "将解压完的dll剪切到程序所在目录 start" 38 39 mv $mulu/bak/docker_name/api.dll $mulu/docker_name/api.dll 40 mv $mulu/bak/docker_name/api.exe $mulu/docker_name/api.exe 41 mv $mulu/bak/docker_name/api.pdb $mulu/docker_name/api.pdb 42 43 echo "将解压完的dll剪切到程序所在目录 end" 44 45 echo "启动程序 start" 46 echo "" 47 48 echo "docker restart docker_name" 49 50 docker restart docker_name 51 52 echo "" 53 echo "启动结束 end" 54 echo "" 55 docker ps 56 echo "" 57 echo "这次备份的版本号为:$current_date,如果需要回滚,可以执行命令: bash $mulu/bak/bak.sh $current_date" 58 echo "------------------------------------------------------------------------------------" 59 echo "" 60 echo "" 61 echo "" 62 echo "" 63 echo ""
以下是bak.sh文件的内容
注:第13-15行请替换成自己需要回滚的内容
1 echo "" 2 echo "" 3 echo "" 4 echo "" 5 echo "" 6 echo "------------------------------------------------------------------------------------" 7 echo "需要回滚的版本号:$1" 8 9 mulu=/data/app 10 11 echo "将备份目录[$1]的dll剪切到程序所在目录 start" 12 13 cp $mulu/bak/docker_name/$1/api.dll $mulu/docker_name/api.dll 14 cp $mulu/bak/docker_name/$1/api.exe $mulu/docker_name/api.exe 15 cp $mulu/bak/docker_name/$1/api.pdb $mulu/docker_name/api.pdb 16 17 echo "将备份目录[$1]的dll剪切到程序所在目录 end" 18 19 echo "启动程序 start" 20 21 docker restart base 22 23 echo "" 24 echo "" 25 echo "启动结束 end 回滚完成" 26 echo "------------------------------------------------------------------------------------" 27 echo "" 28 echo "" 29 echo "" 30 echo "" 31 echo "" 32 docker ps
更新步骤:
1、发布程序,需要更新的dll打包到zip
2、将zip上传到/data/bak/docker_name
3、cd /data/bak
4、bash update.sh zip_name.zip (每次更新替换zip_name)
此时最新程序就更新了
如果需要回滚请执行第4步出来的回滚语句
来源链接:https://www.cnblogs.com/LinryBaker/p/18796527
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
暂无评论内容