前面几篇都是基于阿里云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. Git_远程仓库fork操作

    fork操作:当选择 fork,相当于自己有了一份原项目的拷贝,当然这个拷贝只是针对当时的项目文件,如果后续原项目文件发生改变,你必须通过其他的方式去同步. 使用场景:一般来说,不需要使用 fork ...

  2. Windows下Django的安装与项目创建

    1.Django的安装命令:pip install django 2.如果要指定安装版本可用:pip install django==1.10.3 3.查看指定的安装库:pip show django ...

  3. 【NX二次开发】Block UI 选择小平面区域

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  4. Unicode编码转换, MD5加密,URL16进制加密解密

    一.站长网址:http://www.msxindl.com/ 1.Unicode与中文互转 16进制Unicode编码转换.还原   :http://www.msxindl.com/tools/uni ...

  5. 一起来踩踩 Spring 中这个循环依赖的坑

    1. 前言 2. 典型场景 3. 什么是依赖 4. 什么是依赖调解 5. 为什么要依赖注入 6. Spring的依赖注入模型 7. 非典型问题 参考资料 1. 前言 这两天工作遇到了一个挺有意思的Sp ...

  6. Waymo object detect 2D解决方案论文拓展

    FixMatch 半监督中的基础论文,自监督和模型一致性的代表作. Consistency regularization: 无监督学习的方式,数据\(A\)和经过数据增强的\(A\)计做\(A'\) ...

  7. 孟老板 ListAdapter封装, 告别Adapter代码 (四)

    BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ...

  8. 【题解】Luogu p2014 选课 树型dp

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  9. Pytest学习笔记7-skip和skipif的使用

    前言 在实际的测试中,我们经常会遇到需要跳过某些测试用例的情况,pytest提供了skip和ifskip来跳过测试 下面我们就来通过一些例子看看skip和ifskip具体如何使用吧 skip的用法 使 ...

  10. 9.10、mysql进程、状态在线修改参数重要知识

    1.-e :改参数表示不用登陆mysql就可以使用mysql的命令,有利于于加管道符对数据进行处理: mysql -uroot -p123456 -e "show databases;&qu ...