T O P

[资源分享]     传统.NET 4.x应用容器化体验(5)

  • By - 楼主

  • 2021-07-28 00:00:36
  • 前面几篇都是基于阿里云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应用的容器化迁移,我们也还在探索,相信探索和实践的深入,我会分享更多相关的内容。

     

    本帖子中包含资源

    您需要 登录 才可以下载,没有帐号?立即注册