.net core项目docker部署

此为手动打包更新版

发布.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

© 版权声明
THE END
支持一下吧
点赞5 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容