打包Windows Docker镜像

更新时间:

环境准备

  1. 准备打包的主机:需要主机运行Windows 10(1809, 专业版或者企业版)或Windows Server 2016(1809)操作系统。如果本地没有合适的机器,也可以在阿里云上以按量计费方式购买一台ECS,并选择Windows Server 1809数据中心版。另外,Windows基础容器镜像体积很大(4G左右),如果本地出口带宽不够,下载基础镜像和上传打包镜像会非常慢,甚至失败。因此推荐带宽低于100Mbps的用户使用ECS来完成打包。

  2. 安装Docker:

    • Windows 10主机如何安装Docker,请参见安装教程

    • Windows Server主机如何安装Docker,请参见安装教程

选择基础镜像

用户应根据自己应用所需的基础能力,选择基础镜像,这里整理了三类基础镜像,供用户选择。 基础操作系统镜像: 微软提供了三个基础镜像:windows servercore, windows nanoserver和powershell。

  • servercore 功能最完整,镜像体积最大,在4G左右,镜像地址:

    registry.cn-hangzhou.aliyuncs.com/plugins/windows-servercore:1809

  • nanoserver 裁剪了很多特性,参见详情,镜像地址:

    registry.cn-hangzhou.aliyuncs.com/plugins/windows-nanoserver:1809

  • powerhsell 在nanoserver基础上增加了powerhsell core,镜像地址:

    registry.cn-hangzhou.aliyuncs.com/plugins/windows-powershell:nanoserver-1809

  • jdk基础镜像:openjdk:8u201-jdk-windowsservercore-1809

  • dotnet基础镜像:微软提供了.net core和.net framework两个版本,都支持容器化使用。参考决策表来选择使用.net core还是.net framework

    • net core 2.1 基础镜像:mcr.microsoft.com/dotnet/core/runtime:2.1

    • net core 2.2 基础镜像:mcr.microsoft.com/dotnet/core/runtime:2.2

    • asp.net core 2.1 基础镜像:mcr.microsoft.com/dotnet/core/aspnet:2.1

    • asp.net core 2.2 基础镜像:mcr.microsoft.com/dotnet/core/aspnet:2.2

    • framework 3.5 基础镜像:microsoft/dotnet-framework:3.5-runtime

    • framework 4.7.2 基础镜像:microsoft/dotnet-framework:4.7.2-runtime

  • tomcat基础镜像:

    9.0.17版本:registry.cn-hangzhou.aliyuncs.com/zhiying/tomcat-win:9.0.17-1809tomcat安装目录为c:\\apache-tomcat-9.0.17,启动命令为c:\\apache-tomcat-9.0.17\\bin\\startup.bat。

镜像打包

  1. 编写dockerfile,参考windows上的dockerfile

  2. 制作镜像

    将dockerfile和待打包的文件放到一个目录下,并在该目录执行如下命令:

    docker build -t <镜像仓库地址>:<镜像版本号> .

镜像上传

  1. 登录到镜像仓库

    1. 执行命令:docker login --username=<用户名> registry.cn-shanghai.aliyuncs.com

    2. 登录Registry的用户名是您的阿里云账号的全名,密码是您开通服务时设置的密码。您可以在镜像管理首页修改登录密码。

  2. 测试镜像

    1. 进入powershell

    2. 启动容器:$id=$(docker run -itd <镜像仓库地址>:<镜像版本号>)

    3. 查看容器启动日志:docker logs $id

    4. 进入容器,检查程序是否正常:docker exec -it $id cmd

    5. 停止容器:docker stop $id

3. 打包TAG

执行命令:docker tag <Image ID> <镜像仓库地址>:<镜像版本号>。其中镜像仓库地址请在上面新建的镜像仓库详情中查看。镜像版本号自定义输入版本。

4. 推送镜像

执行命令:docker push <镜像仓库地址>:<镜像版本号>。其中镜像仓库地址镜像版本号是上一步中输入的内容。推送成功后,即可在镜像管理具体仓库中查看到对应的镜像。

image