Fork me on GitHub

容器化案例一:.NET服务容器化

公司教研系统、课件系统、截图服务还有一些其他零散的后台管理系统使用.NET服务编写,这篇文章记录相关服务容器化内容。

编译打包

1
2
3
4
5
6
7
8
9
10
dotnet restore --configfile "NuGet.config" "ContractFile/ContractFile.csproj"
cd ContractFile
dotnet build "ContractFile.csproj" -c Release -o ./app/ContractFile
dotnet publish "ContractFile.csproj" -c Release -o ./app/ContractFile


dotnet restore --configfile "NuGet.config" "ContractFile.WorkerService/ContractFile.WorkerService.csproj"
cd ContractFile.WorkerService
dotnet build "ContractFile.WorkerService.csproj" -c Release -o ./app/ContractFile.WorkerService
dotnet publish "ContractFile.WorkerService.csproj" -c Release -o ./app/ContractFile.WorkerService

该项目分多个模块,分别单独部署

Dockerfile文件编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FROM harbor.k8s.xxx.com/public/dot_net6.0

WORKDIR /app

RUN set -e

RUN apt-get -y update && \
apt-get install -y traceroute inetutils-ping telnet net-tools curl

RUN sed -i 's/TLSv1.2/TLSv1/g' /etc/ssl/openssl.cnf && \
sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf

COPY /AXX_ContractFile/app/AXX_ContractFile /app/

ENV ASPNETCORE_URLS=http://*:80

ENTRYPOINT ["dotnet", "ContractFile.dll"]

deployment文件编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
{{$MODULE := "contractfileapi" }}
{{$TRUE_APP_NAME := (printf "%v-%v" .Env.FLOW_STANDARD_NAME $MODULE)}}


---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{$TRUE_APP_NAME}}-deploy
labels:
rd: {{.Env.CMP_RD}}
app: {{.Env.FLOW_STANDARD_NAME}}
project-name: {{.Env.FLOW_PROJECT_NAME}}
module: {{$MODULE}}
spec:
replicas: {{.Env.D_STATUS_REPLICAS}}
selector:
matchLabels:
app: {{.Env.FLOW_STANDARD_NAME}}
project-name: {{.Env.FLOW_PROJECT_NAME}}
module: {{$MODULE}}
template:
metadata:
annotations:
alibabacloud.com/burst-resource: eci
labels:
rd: {{.Env.CMP_RD}}
app: {{.Env.FLOW_STANDARD_NAME}}
project-name: {{.Env.FLOW_PROJECT_NAME}}
module: {{$MODULE}}
spec:
dnsConfig:
options:
- name: ndots
value: "3"
imagePullSecrets:
- name: harbor-registry
containers:
- name: serve
image: {{.Env.IMAGE_NAME}}
imagePullPolicy: Always
startupProbe:
tcpSocket:
port: {{.Env.CMP_PORT }}
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 30
livenessProbe:
tcpSocket:
port: {{.Env.CMP_PORT }}
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 15
env:
- name: JAVA_APP_OPTS
value: {{if eq .Env.FLOW_DIST_ENV "pre"}}"-Denv=PRO -Didc=pre"{{else}}"-Denv=PRO"{{end}}
- name: ENABLE_PP_AGENT
value: {{if eq .Env.FLOW_DIST_ENV "pre"}}"0"{{else}}"1"{{end}}
- name: ASPNETCORE_ENVIRONMENT
value: {{if eq .Env.FLOW_DIST_ENV "pre"}}"iflowStaging"{{else}}"Production"{{end}}
resources:
limits:
cpu: 1000m
memory: 2048Mi
requests:
cpu: 40m
memory: 1024Mi
ports:
- containerPort: {{.Env.CMP_PORT}}
name: web
protocol: TCP
volumeMounts:
- name: logs
mountPath: /tmp/log
- name: filebeat-data
mountPath: /data/var/log

volumes:
- name: logs
persistentVolumeClaim:
claimName: log-nas
- name: filebeat-data
emptyDir: {}
...



---
apiVersion: v1
kind: Service
metadata:
name: {{$TRUE_APP_NAME}}-svc
labels:
rd: {{.Env.CMP_RD}}
app: {{.Env.FLOW_STANDARD_NAME}}
module: {{$MODULE}}
spec:
type: ClusterIP
selector:
app: {{.Env.FLOW_STANDARD_NAME}}
module: {{$MODULE}}
ports:
- name: web
protocol: TCP
port: {{.Env.CMP_PORT}}
targetPort: {{.Env.CMP_PORT}}
...

常用的dotnet命令说明

1
2
3
4
5
6
7
dotnet new
dotnet test
dotnet clean
dotnet restore 下载依赖
dotnet build 构建
dotnet run 运行
dotnet publish 将应用程序及其依赖项发布到文件夹以部署到托管系统

参考资料

======================================================
希望各位朋友支持一下

本文作者:dongsheng
本文地址https://mds1455975151.github.io/archives/4b774b02.html
版权声明:转载请注明出处!

坚持技术分享,您的支持将鼓励我继续创作!