avatar

目录
Asp.Net on Docker

ASP.NET Core on Docker

一、Docker极简介绍

1.基本介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

2.Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

3.Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。
Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。
借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。
通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

  1. 快速,一致地交付您的应用程序
  2. 响应式部署和扩展
  3. 在同一硬件上运行更多工作负载

二、Docker 架构

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

三、Docker的安装

以centos为例:

1.安装环境,查看Centos版本

lsb_release -a

ps: 命令不存在请执行yum install -y redhat-lsb 进行安装

CentOS 7安装docker要求系统为64位、系统内核版本为 3.10 以上,用以下命令查看位数

uname -r

2.yum源安装

2.1 查看是否已安装docker列表

yum list installed | grep docker

2.2 安装docker

yum -y install docker

ps: -y表示不询问安装,直到安装成功,安装完后再次查看安装列表

2.3 执行 yum list install | grep docker 查看

2.4 启动docker

systemctl start docker

2.5 设置开机启动

systemctl enable docker.service

2.6 查看docker服务状态

systemctl status docker

2.7 配置docker加速器
执行命令: vim /etc/docker/daemon.json

Code
1
2
3
4
5
6

{
"registry-mirrors": [
"https://d8b3zdiw.mirror.aliyuncs.com"
]
}

注意:此处json格式一定要规范,不然docker服务重启失败。

2.8 重启docker服务

systemctl daemon-reload
systemctl restart docker

四、ASP.NET Core on Docker配置

1 拉取dotnet/aspnetcore的最新镜像

docker pull microsoft/aspnetcore:latest

2 docker images 验证镜像是否拉取成功

3 本地vs 编辑 dockerfile 文件

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 父镜像
FROM microsoft/aspnetcore:3.1

# 设置工作目录
WORKDIR /app

# 复制发布文件到/app下
COPY . /app

# 设置端口
EXPOSE 8810

# 使用dotnet HelloWebApp.dll来运行ASP.NET Core项目,注意大小写

ENTRYPOINT ["dotnet", "HelloWebApp.dll", "--server.urls", "http://*:8810"]

4 发布这个ASP.NET Core WebAPI,并将Release文件传送到Linux服务器中

5 在linux命令端 执行 cd Release文件夹 ,开始打包docker镜像,执行以下命令

docker build -t agentservice-container:1.0 . 

ps:注意命令末尾.,:1.0 表示给该镜像打标记,1.0版本

6 验证镜像是否打包成功

docker images

7 运行docker

docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0

ps: 如果docker run失败后再次运行会提示名称已存在,可以使用以下命令来删除容器 docker rm -f [dockername]

如果想要docker容器在非正常退出后自动重启,可以加上–restart选项 docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0 --restart=always

8 验证docker运行效果

可以在宿主机验证,执行以下命令:

curl http://192.168.120.136:8801/api

远程客户端浏览器验证

http://192.168.120.136:8801/api

五、Supervisor守护进程

1 安装

yum install supervisor

2 配置

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 进入配置目录
cd /ect/supervisor/conf.d/
# 创建配置文件
touch HelloWebApp.conf
## 编辑配置文件
vim HelloWebApp.conf
## 写入以下命令
[program:HelloWebApp]
command=dotnet HelloWebApp.dll #要执行的命令
directory=/home/yxd/Workspace/publish #命令执行的目录
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=www-data #进程执行的用户身份
stopsignal=INT
autostart=true #是否自动启动
autorestart=true #是否自动重启
startsecs=1 #自动重启间隔
stderr_logfile=/var/log/HelloWebApp.err.log #标准错误日志
stdout_logfile=/var/log/HelloWebApp.out.log #标准输出日志

## 保存退出
:wq

3 重新加载配置

supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf

或者直接重启Supervisor

service supervisor stop
service supervisor start

4 查看supervisor日志

cat /etc/log/supervisor/supervisord.log

5 supervisorctl使用

通过supervisorctl对进程进行管理: supervisorctl help

6 Supervisor UI 管理台

http://localip:9001,可以进行进程的重启,日志查看等操作

7 多主机统一管理

官方推荐:http://supervisord.org/plugins.html
cesi:Web-based dashboard written in Python.
Supervisord-Monitor:Web-based dashboard written in PHP.
SupervisorUI:Another Web-based dashboard written in PHP.

参考资料:
周旭龙:《.NET Core微服务之ASP.NET Core on Docker》
杨晓东:《ASP.NET Core Docker部署》
菜鸟教程:《Docker 教程》

文章作者: HJY
文章链接: https://hjy-dev.github.io/2020/02/25/Asp-Net-on-Docker/
版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明来自 Kiven Blog
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论