对于刚刚完成的Alipay支的Demo, 我想要把它部署到Docker中去, 下面我来演示相关步骤.

创建配置文件

配置文件的重中之重是Dockerfile, 他的内容如下:

# 第一部分是编译并发布项目
# 以微软.Net Core SDK作为基础镜像, 并且以build作为别名
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
# 切换build镜像工作目录到/app
WORKDIR /app
# 拷贝sln和csproj项目文件
COPY *.sln .
COPY AliPay/*.csproj ./AliPay/
# Restore项目用到的包
RUN dotnet restore
# 拷贝项目文件到镜像里面相应到目录
COPY AliPay/. ./AliPay/
# 切换build镜像工作目录到/app/AliPay
WORKDIR /app/AliPay
# 以Release模式发布应用到out文件夹
RUN dotnet publish -c Release -o out
# 第二部分是启动项目
# 以微软.Net Core运行环境作为基础镜像, 并且以runtime作为别名
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
# 切换runtime镜像工作目录到/app
WORKDIR /app
# 把build镜像里面编译出来的文件拷贝到runtime镜像
COPY --from=build /app/AliPay/out ./
# 暴漏端口
EXPOSE 8000
# 启动应用
# ENTRYPOINT ["dotnet", "AliPay.dll", "--server.urls", "http://*:8000"]
ENTRYPOINT ["dotnet", "AliPay.dll"]

还可以再多一个.dockerignore, 如下:

bin\
obj\

打包镜像

在创建了Dockerfile之后, 创建镜像将会很容易:

docker build -t alipayimg .

里面的两个参数:

  • -t: 指定要创建的目标镜像名
  • .: Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

启动容器

最后是启动镜像:

docker run -d -p 8666:8000 --name alipay alipayimg

参数说明:

  • -d: 镜像启动后在后台运行
  • -p 8666:8000: 端口的映射关系, 主机端口:容器端口
  • --name alipay: 启动容器的名字
  • alipayimg: 使用的镜像名

编程总结

一开始, 我按照网上的介绍, 一直使用如下命令指定端口:

dotnet AliPay.dll --server.urls http://*:8000

而它一直不起作用.

Github上说需要添加Microsoft.Extensions.Configuration.CommandLine, 可是添加完了依然不起作用, 没办法, 最后只能在代码里把端口写死:

Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureAppConfiguration(config =>
{
config.AddJsonFile("alipay.json");
// config.AddCommandLine(args);
});
webBuilder.UseUrls("http://*:8000");
webBuilder.UseStartup<Startup>();
});

访问应用

打开主机浏览器, 访问http://localhost:8666, 大功告成.

Docker加强

在之前的基础上, 我们继续使用docker-compose进行容器编排.

移除容器和镜像

因为要进行编排, 所以我们使用命令将之前创建的容器和镜像删掉:

  • 关闭容器:
docker stop container_id[container_name]
  • 删除容器:
docker rm container_id[container_name]
# 注意: 如果没有停止容器直接删除会报错
  • 删除镜像:
docker rm- image_id[image_name]
# 注意: 如果没有删除容器而直接删除镜像会报错

引进Redis

如果是单个文件使用compose实际上意义不大, 所以我们引进Redis.

引入类库

首先使用nugget安装StackExchange.Redis.

安装完成之后, 在Startup的ConfigureService添加内容如下:

services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect("docker.myredis:6379"));

改写代码

修改HomeController如下:

private readonly ILogger<HomeController> _logger;
private readonly IConnectionMultiplexer _connectionMultiplexer;
public HomeController(ILogger<HomeController> logger, IConnectionMultiplexer multiplexer)
{
_logger = logger;
_connectionMultiplexer = multiplexer;
}
public IActionResult Index()
{
var db = _connectionMultiplexer.GetDatabase();
var num = db.StringIncrement("count");
ViewData["num"] = num;
return View();
}

修改Home/Index的view如下:

@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome, 您是当前 @ViewData["num"] 位访客, 更新1</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

添加编排文件

在项目根目录添加docker-compose.yml, 内容如下:

version: '3.0'
services:
alipay:
container_name: alipay
image: alipayimg
build:
context: .
dockerfile: ./Dockerfile
depends_on:
- myredis
links:
- "myredis:docker.myredis"
ports:
- "8666:8000"
myredis:
container_name: myredis
image: redis

编排项目:

docker-compose up --build -d

使用Docker-Compose编排发布.Net Core+Redis应用两个镜像到Docker的更多相关文章

  1. 使用Docker compose编排Laravel应用

    前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...

  2. 使用docker compose编排容器

    一.安装docker compose 二进制包安装 1.安装 Docker Compose 从 官方 GitHub Release 处直接下载编译好的二进制文件即可 # curl -L https:/ ...

  3. Docker(二十六)-Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  4. Docker系列之(五):使用Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  5. 通过 Docker Compose 组合 ASP NET Core 和 SQL Server

    目录 Docker Compose 简介 安装 WebApi 项目 创建项目 编写Dockfile Web MVC 项目 创建项目 编写Dockfile 编写 docker-compose.yml文件 ...

  6. docker compose 编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  7. Docker Compose编排工具部署lnmp实践及理论(详细)

    目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...

  8. 使用Docker Compose编排Spring Cloud微服务

    文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...

  9. 在Windows Server 2019通过Docker Compose部署Asp.Net Core

    一.安装Docker Enterprise 安装文档是: https://docs.docker.com/install/windows/docker-ee/ 安装完成后,如下图 二.首先,拉取一个W ...

随机推荐

  1. if后的判断条件

    转自https://blog.csdn.net/lxn18392641463/article/details/78321080 先说明原因.这里不只是有代码规范的问题,还有汇编语言的问题,要知道为什么 ...

  2. 「雅礼集训 2018 Day2」农民

    传送门 Description  「搞 OI 不如种田.」 小 D 在家种了一棵二叉树,第 ii 个结点的权值为 \(a_i\). 小 D 为自己种的树买了肥料,每天给树施肥. 可是几天后,小 D 却 ...

  3. 使用flexmark将MarkDown转为HTML

    引入对应的依赖 <!-- https://mvnrepository.com/artifact/com.vladsch.flexmark/flexmark --> <dependen ...

  4. 2.json解析

    static String jsonStr = "{\"sites\":[{\"name\":\"gold\",\"ur ...

  5. Django连接MySQL(二)

    1.首先我们需要创建好项目 2.安装MySQL数据库 3.setting中修改database设置 DATABASES = { 'default': { 'ENGINE': 'django.db.ba ...

  6. ubuntu之路——day8.1 深度学习优化算法之mini-batch梯度下降法

    所谓Mini-batch梯度下降法就是划分训练集和测试集为等分的数个子集,比如原来有500W个样本,将其划分为5000个baby batch,每个子集中有1000个样本,然后每次对一个mini-bat ...

  7. R Shiny app | 交互式网页开发

    网页开发,尤其是交互式动态网页的开发,是有一定门槛的,如果你有一定的R基础,又不想过深的接触PHP和MySQL,那R的shiny就是一个不错的选择. 现在R shiny配合R在统计分析上的优势,可以做 ...

  8. SiamRPN: High Performance Visual Tracking with Siamese Region Proposal Network

    High Performance Visual Tracking with Siamese Region Proposal Network 2018-11-26 18:32:02 Paper:http ...

  9. Mysql中 查询慢的 Sql语句的记录查找

    Mysql中 查询慢的 Sql语句的记录查找 慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化. ...

  10. XML 中的 xmlns 等属性的意义

    原文:https://blog.csdn.net/lengxiao1993/article/details/77914155 Maven 是一个 java 开发人员很难绕过的构建工具, 因为有众多的开 ...