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 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
- 快速,一致地交付您的应用程序
- 响应式部署和扩展
- 在同一硬件上运行更多工作负载
二、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
1 |
|
注意:此处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 文件
1 |
|
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 配置
1 |
|
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 教程》