Docker for Windows初体验

容器概述

容器是一种用于在本地和云中跨各种环境打包和运行Windows和Linux应用程序的技术。容器提供了一个轻量级的隔离环境,使应用程序更易于开发,部署和管理。容器可以快速启动和停止,因此非常适合需要快速适应不断变化的需求的应用程序。容器的轻量性质也使其成为增加基础结构的密度和利用率的有用工具。

所有容器都是根据容器映像创建的。容器映像是一堆文件,这些文件被组织成位于您的本地计算机或远程容器注册表中的多层堆栈。容器映像由支持应用程序,应用程序,应用程序的任何运行时或依赖项以及应用程序需要正常运行的其他任何其他配置文件所需的用户模式操作系统文件组成。

容器是一个隔离的,轻量级的筒仓,用于在主机操作系统上运行应用程序。容器构建在主机操作系统内核(可以认为是操作系统的嵌入式管道)之上。容器共享主机操作系统的内核时,容器不会不受限制地访问它。取而代之的是,容器获得了系统的隔离(有时是虚拟化)视图。例如,容器可以访问文件系统和注册表的虚拟版本,但是任何更改仅影响容器,并且在停止时将其丢弃。为了保存数据,容器可以装载永久性存储,例如Azure磁盘或文件共享(包括Azure Files)。

容器建立在内核之上,但是内核并未提供应用程序需要运行的所有API和服务-其中大多数由在用户模式下在内核之上运行的系统文件(库)提供。因为容器与主机的用户模式环境隔离,所以容器需要这些用户模式系统文件的自己的副本,这些文件被打包到称为基础映像的文件中。基础映像用作构建容器的基础层,为容器提供内核未提供的操作系统服务。

Microsoft提供了几个映像(称为基本映像),您可以将它们用作构建自己的容器映像的起点:

  • Windows-包含全套Windows API和系统服务(减去服务器角色)。
  • Windows Server Core-较小的映像,其中包含Windows Server API的子集,即完整的.NET框架。它也包括大多数服务器角色,尽管很少,但不是传真服务器。
  • Nano Server-最小的Windows Server映像,支持.NET Core API和某些服务器角色。
  • Windows 10 IoT核心版-硬件制造商用于运行ARM或x86 / x64处理器的小型物联网设备使用的Windows版本。

环境搭建

系统要求

  • Windows容器功能在Windows Server(半年通道),Windows Server 2019,Windows Server 2016和Windows 10专业版和企业版(版本1607及更高版本)上可用。
  • 在运行Hyper-V隔离之前必须先安装Hyper-V角色
  • Windows Server Container主机必须已将Windows安装到c:。如果仅部署Hyper-V隔离的容器,则此限制不适用。

下载安装

您可以使用以下步骤在Windows 10专业版和企业版上安装Docker。

  • 下载并安装Docker Desktop,如果您还没有一个免费的Docker帐户,请创建一个(如果不想创建,请评论区留言,我会通过百度网盘分享)。有关更多详细信息,请参阅Docker文档

  • 在安装过程中,将默认容器类型设置为Windows容器。要在安装完成后进行切换,可以使用Windows系统托盘中的Docker项目(如下所示),或在PowerShell提示符中使用以下命令:  

                                       

& $Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon

所有容器都是根据容器映像创建的。Microsoft提供了几种称为基础映像的入门映像供您选择(有关更多详细信息,请参见容器基础映像)。此过程将提取(下载并安装)WIndows基础映像,也就是下图的第三个(比较大,3.7G左右)。

打开命令提示符窗口(例如内置命令提示符,PowerShell或Windows Terminal),然后运行以下命令下载并安装基本映像:

docker pull mcr.microsoft.com/windows:1809

映像下载完成后,通过查询本地docker映像存储库来验证系统中是否存在该映像。运行命令docker images将返回已安装映像的列表。

docker images

 运行容器

  • 通过在命令提示符窗口中输入以下命令,从图像启动具有交互式会话的容器:
docker run -it mcr.microsoft.com/windows:1809 cmd.exe
  • 启动容器后,命令提示符窗口将上下文更改为容器。在容器内,我们将创建一个简单的“ Hello World”文本文件,然后通过输入以下命令退出容器: 
echo "Hello World!" > Hello.txt
exit
  •  通过运行docker ps命令获取刚刚退出的容器的容器ID :
docker ps -a
  • 创建一个新的“ HelloWorld”图像,其中包含您运行的第一个容器中的更改。为此,请运行docker commit命令,将其替换<containerid>为容器的ID: 
docker commit <containerid> helloworld
  • 完成后,您将拥有一个包含hello world脚本的自定义图像。这可以通过docker images命令看到。 
docker images
  • 最后,使用带有参数的docker run命令运行新容器,该--rm参数会在命令行(cmd.exe)停止后自动删除该容器。
docker run --rm helloworld cmd.exe /s /c type Hello.txt

结果是从“ HelloWorld”映像创建了一个容器,在该容器中启动了cmd.exe实例,该实例读取了我们的文件并将文件内容输出到Shell,然后该容器停止并被删除。

//删除容器
docker rm -f containerID

//删除镜像
docker rmi -f imageID

备注:还有一种通过dockerfile的方式自动运行,还在研究中...

遇到的问题

  • Docker:“no matching manifest for  windows/amd64 int the manifest list entries”

右键任务栏docker图标,依次选择settings,Daemon,选中Experimental,然后重启docker。

还需要注意的是,在执行docker pull mcr.microsoft.com/windows:1809命令时,标红的字段是映像标签,也就是映像的版本,这个一定要低于系统版本,具体的可参考https://hub.docker.com/_/microsoft-windows

  • 一定要确定好当前是windows container还是Linux container,二者可随意切换但不能并存
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值