全部产品
云市场

打包Windows Docker镜像

更新时间:2019-04-19 00:12:04

1. 环境准备

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

2. 选择基础镜像

用户应根据自己应用所需的基础能力,选择基础镜像,这里整理了三类基础镜像,供用户选择。

  • 基础操作系统镜像: 微软提供了三个基础镜像: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
    • net framework 3.5 基础镜像:microsoft/dotnet-framework:3.5-runtime
    • net 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-1809
    tomcat安装目录为c:\\apache-tomcat-9.0.17,启动命令为c:\\apache-tomcat-9.0.17\\bin\\startup.bat

3. 镜像打包

  1. 编写dockerfile
    参考这里编写windows下的dockerfile(https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/manage-docker/manage-windows-dockerfile)。
  2. 制作镜像
    将dockerfile和待打包的文件放到一个目录下,并在该目录执行如下命令:docker build -t <镜像仓库地址>:<镜像版本号> .

6. 镜像上传

  1. 登录到镜像仓库
    执行命令:docker login --username=<用户名> registry.cn-shanghai.aliyuncs.com
    登录Registry的用户名是您的阿里云账号的全名,密码是您开通服务时设置的密码。您可以在镜像管理首页修改登录密码。
  2. 测试镜像
    • 进入powershell
    • 启动容器:$id=$(docker run -itd <镜像仓库地址>:<镜像版本号>)
    • 查看容器启动日志:docker logs $id
    • 进入容器,检查程序是否正常:docker exec -it $id cmd
    • 停止容器:docker stop $id
  3. 打包TAG
    执行命令:docker tag <Image ID> <镜像仓库地址>:<镜像版本号>
    其中镜像仓库地址请在上面新建的镜像仓库详情中查看。镜像版本号自定义输入版本
  4. 推送镜像
    执行命令:docker push <镜像仓库地址>:<镜像版本号>
    其中镜像仓库地址镜像版本号是上一步中输入的内容。推送成功后,即可在镜像管理具体仓库中查看到对应的镜像
    image.png