前面几篇都是基于阿里云ECS直接玩的,有童鞋问直接用Windows Server 2019可以玩不,本篇就为你介绍一下如何给Windows Server 2019配置Docker环境。

1 准备工作

首先,你需要一台服务器,安装 Windows Server 2019 DataCenter(数据中心)版本。

Windows Server 2016版本开始就支持原生Docker了,在2019版本,它做了以下的改进更好地支持Docker:

Kubernetes 1.14 发行版本中包含了将 Windows 容器调度到 Kubernetes 集群中 Windows 节点 (Windows Server 2019) 上的生产级支持,从而使得巨大 的 Windows 应用生态圈能够充分利用 Kubernetes 的能力。

其次,你最好给服务器安装一下更新(非必选步骤):

> scconfig

在弹出的选择框选择:6,然后选择:A

这时Windows Server会下载所有的更新。

最后,启用Windows Server的Container服务:

> Install-WindowsFeature -Name Containers

安装完成后需要重启Windows Server。

2 Docker安装与配置

两种安装方式

在Windows Server 2019中,支持在线安装 和 离线安装 Docker服务,在线安装其实是通过Nuget来安装(耗时较多),这里我们选择直接下载下来离线安装。

下载离线包

这里我们选择下载docker离线安装包 20.10.5 版本,这也是阿里云ECS(Windows Server 2019 with Container镜像)所采用的的版本。

https://dockermsft.blob.core.windows.net/dockercontainer/docker-20-10-5.zip

将离线包解压后放到Windows Server 2019的 C:\Program Files\Docker 目录下,当然,这个目录也需要你手动创建。

设置环境变量

为Docker目录设置环境变量:

配置镜像加速

阿里云ECS主机为我们默认配置了镜像加速源,而在自己搭建的服务器上,需要配置一下镜像加速。

创建 C:\ProgramData\docker\config 目录,并在此目录下创建一个 daemon.json 配置文件:

{
"registry-mirrors": ["https://k2aspcxw.mirror.aliyuncs.com"],
"insecure-registries" : [ "reg.edisonzhou.cn" ]
}

这里的内容里,一是为docker配置配置镜像加速(这里使用的阿里云的镜像源),二是为docker配置私有镜像仓库。

Note:设置私有镜像仓库如果配置为hosts 或 域名,请先确保是否有提前设置映射。

启动dockerd服务

将dockerd注册为Windows服务,以便能够开机自启动:

cd C:\Program Files\Docker # 进入dockerd.exe所在目录路径
dockerd --register-service # 将dockerd 注册为服务

然后,通过命令启动dockerd服务:

Start-Service docker

或者直接在服务列表中启动dockerd服务:

切换数据目录

一般情况下,我们的C盘容量总是有限的,因此我们可以切换一下docker默认的数据目录(C盘下),避免将来C盘被docker镜像文件撑爆。我们要做的就是修改daemon.json,增加data-root的配置:

{
"registry-mirrors": [ "https://k2agpcx0.mirror.aliyuncs.com" ],
"insecure-registries": [ "reg.edisonzhou.cn" ],
"data-root": "E://Docker"
}

重新启动docker服务即可生效,不过一旦切换了目录,原来存在镜像以及容器就不被检查出来了,都需要重新创建,所以在切换之前最好先删除原来下载好的镜像&容器。

3 pull & run

拉取一些基础镜像

这里我们还是拉取一些如.NET SDK & Runtime之类的基础镜像:

docker pull mcr.microsoft.com/dotnet/framework/sdk:4.8
docker pull mcr.microsoft.com/dotnet/framework/aspnet:4.8

构建ASP.NET应用镜像

这里我们将之前的asp.net mvc sample源码拷贝到Windows Server并进行build镜像。

该源码的Dockerfile如下:

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetmvcapp/*.csproj ./aspnetmvcapp/
COPY aspnetmvcapp/*.config ./aspnetmvcapp/
RUN nuget restore
# copy everything else and build app
COPY aspnetmvcapp/. ./aspnetmvcapp/
WORKDIR /app/aspnetmvcapp
RUN msbuild /p:Configuration=Release -r:False
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
WORKDIR /inetpub/wwwroot
COPY --from=build /app/aspnetmvcapp/. ./

构建过程如下:

E:\Sources\aspnetmvcapp> docker build -t reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp .
Sending build context to Docker daemon 2.83MB
Step 1/12 : FROM reg.edisonzhou.cn/dotnet/sdk:4.8 AS build
---> cf61fa19d693
Step 2/12 : WORKDIR /app
---> Running in 0aeaf13a2399
Removing intermediate container 0aeaf13a2399
---> cd8cb2e21d9a
Step 3/12 : COPY *.sln .
---> 720986cc9a80
Step 4/12 : COPY aspnetmvcapp/*.csproj ./aspnetmvcapp/
---> 19ed4b0394b8
Step 5/12 : COPY aspnetmvcapp/*.config ./aspnetmvcapp/
---> 685d35ea2682
Step 6/12 : RUN nuget restore
---> Running in a96b4ac5f72c
......... 此处省略一万字
Removing intermediate container a3f263c97c1e
---> 40774beabb8c
Step 10/12 : FROM reg.edisonzhou.cn/dotnet/runtime:4.8 AS runtime
---> 142ad6e5e9c6
Step 11/12 : WORKDIR /inetpub/wwwroot
---> Running in e306e8160570
Removing intermediate container e306e8160570
---> 56f50e22d843
Step 12/12 : COPY --from=build /app/aspnetmvcapp/. ./
---> 313613c96b44
Successfully built 313613c96b44
Successfully tagged reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp

运行ASP.NET应用容器

直接通过 docker run 起来:

docker run --name aspnet_mvc_sample --rm -it -d -p 8000:80 --cpus 1 -m 1024m reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp

运行效果如图:

4 总结

本文介绍了如何在本地的Windows Server 2019服务器上安装和配置Docker环境,最后演示了一下ASP.NET应用的基本容器操作。

对于传统.NET 4.x应用的容器化迁移,我们也还在探索,相信探索和实践的深入,我会分享更多相关的内容。

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

传统.NET 4.x应用容器化体验(5)的更多相关文章

  1. 传统.NET 4.x应用容器化体验(1)

    我们都知道.NET Core应用可以跑在Docker上,那.NET Framework 4.x应用呢?借助阿里云ECS主机(Windows Server 2019 with Container版本), ...

  2. 传统.NET 4.x应用容器化体验(4)

    上一篇我们试着将.NET 4.x的镜像推送到harbor私有镜像仓库,本篇我们来使用一下阿里云的镜像仓库服务并了解一下携程的实践. 1 关于阿里云镜像仓库 阿里云容器镜像服务(简称 ACR)是面向容器 ...

  3. 传统.NET 4.x应用容器化体验(2)

    上一篇我们基于Windwos Server 2019 with Container初步跑了一个ASP.NET WebForm应用程序.本篇我们来自己编译部署一个ASP.NET MVC应用程序到Wind ...

  4. 传统.NET 4.x应用容器化体验(3)

    上一篇我们自己通过编写Dockerfile来编译部署一个ASP.NET MVC应用程序到Windows Container,这一篇我们来试着将.NET 4.x的镜像推送到harbor私有镜像仓库. 1 ...

  5. 容器化ICT融合初体验

    [编者的话]本次将分享的容器化ICT融合平台是一种面向未来ICT系统的新型云计算PaaS平台,它基于容器这一轻量级的虚拟化技术以及自动化的"微服务"管理架构,能够有效支撑应用快速上 ...

  6. Rio手把手教学:如何打造容器化应用程序的一站式部署体验

    11月19日,业界应用最为广泛的Kubernetes管理平台创建者Rancher Labs(以下简称Rancher)宣布Rio发布了beta版本,这是基于Kubernetes的应用程序部署引擎.它于今 ...

  7. Docker最全教程——MongoDB容器化(十二)

    MongoDB容器化 MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和 ...

  8. 开箱即用,Knative 给您极致的容器 Serverless 体验

    作者 | 冬岛  阿里巴巴技术专家 导读:托管 Knative 开箱即用,您不需要为这些常驻实例付出任何成本.结合 SLB 云产品提供 Gateway 的能力以及基于突发性能型实例的保留规格功能,极大 ...

  9. 4 个场景揭秘,如何低成本让容器化应用 Serverless 化?

    作者 | changshuai FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维.容量规划.云产品打通集成等责任,使得开发者可以专注业务逻辑.提高交付速度 ( ...

随机推荐

  1. python10-网络编程

    1,七层网络协议 应表会传网数物: 应用层.表示层.会话层 (这三层又可以合并为应用层,这样就是五层网络协议[osi五层协议]) python '你好'.encoding('utf-8') 传输层. ...

  2. 『无为则无心』Python基础 — 2、编译型语言和解释型语言的区别

    目录 1.什么是计算机语言 2.高级语言中的编译型语言和解释型语言 (1)编译型语言 (2)解释型语言 (3)编译型语言和解释型语言执行流程 3.知识扩展: 4.关于Python 1.什么是计算机语言 ...

  3. Redis 面霸篇:高频问题横扫核心知识点

    「码哥字节」从高频面试问题跟大家一起横扫 Redis 核心知识点,从根本上理解 Redis ,不做八股文的工具人,做扭转乾坤的大神. 码哥到如今已经写了 9 篇 Redis 连载,后台有小伙伴也让我写 ...

  4. Windows 11,一个新功能,一场新屠杀

    6月24日,微软正式公布了新一代操作系统:Windows 11.这次的更新距离上一代操作系统Windows 10的发布,隔了有6年之久. 在新一代的操作系统中,包含了这些亮点: 采用了全新的UI设计. ...

  5. theUnforgiven-冲刺第一天

    每天的冲刺博客分为scrum和PM报告两部分 吴邦天 负责项目整体构思以及对任务安排,承担项目具体设计,编码: 唐嘉诚 负责项目前端页面设计,承担整个项目的后端数据库搭建以及编码 周游 项目美化以及细 ...

  6. .NET Core添加日志插件

    二. 首先控制器的方法中写: private readonly ILogger<fluueController> _logger; public fluueController(ILogg ...

  7. 【LeetCode每日一题 Day 5】5. 最长回文子串

    大家好,我是编程熊,今天是LeetCode每日一题的第五天,一起学习LeetCode第五题<最长回文子串>. 题意 给你一个字符串 s,找到 s 中最长的回文子串. 示例 输入:s = & ...

  8. 通过UnityWebRequest得到的纹理转精灵

    private IEnumerator GetImage(string url, Image fileImage) { UnityWebRequest WebRequest = new UnityWe ...

  9. Visual Studio Code 和Visual Studio插件收集(持续更新)

    Visual Studio Code 插件收集 Chinese (Simplified) Language Pack 默认刚安装的VSC是原味英文的,如果你用不习惯,非常简单,官方出品的简体中文语言包 ...

  10. 单链表(LinkedList)

    与数组相似,链表也是一种线性数据结构.这里有一个例子:   正如你所看到的,链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起.   链表有两种类型:单链表和双链表 ...