众所周知,windows有下有两种docker容器实现方式
一种是基于虚拟化跑一个linux内核(Hyper-V WSL2),另一种是Windows原生容器(Windows container)。
本文讨论的是Windows原生容器,而不是基于虚拟化技术实现的容器。
要使用Windows container原生容器有两种方法
方法1:安装Desktop Docker
可以直接去Desktop Docker官方下载
需要在安装过程的中
取消勾选 “Use WSL 2 instead of Hyper-V (recommended)” 选项
勾选 “Allow Windows Containers to be used with this installation” 选项
并在安装完成后右键任务栏右边的docker图标,选择“switch to windows containers”切换到windows容器模式。
设置完成后即可直接在终端或者Desktop Docker管理容器。
方法2:直接使用Docker daemon + Docker CLI
需要手动打开windows的容器功能
在控制面板\程序\程序和功能->启用或关闭 Windows 功能中打开
或者在powershell中运行Enable-WindowsOptionalFeature -Online -FeatureName containers –All
即可打开容器功能,可能需要重启才生效。
然后去下载Windows的Docker daemon和Docker CLI二进制静态可执行文件
下载地址:Index of win/static/stable/x86_64/,可以拉到最下面下载最新版本的
下载下来后解压,进入到解压的docker目录
有两个可执行文件,其中dockerd.exe是Docker守护程序,docker.exe是Docker CLI管理工具。
使用管理员身份的终端加参数执行
dockerd.exe --exec-opt isolation=process
即可以进程隔离(即windows原生容器)模式启动Docker守护程序,此时可以使用docker.exe连接并管理守护进程(docker.exe也需要管理员权限)。
其他问题:
如果想在任意路径下使用docker,请考虑把docker.exe加入环境变量。
可注册Docker守护程序为windows服务实现自启
dockerd.exe --register-service
如果想让Docker守护程序默认以进程隔离模式启动,需要编辑
C:\ProgramData\docker\config\daemon.json
(config文件夹和daemon.json需要手动创建)
在daemon.json中写入
{
"exec-opts": ["isolation=process"]
}
其他:
这windows的java,python镜像动不动就几个G,比系统安装镜像还大了属于是,最小的容器镜像是nanoserver,但里面几乎什么东西都没有,目前只知道有curl。
PS C:\Windows\System> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/windows/nanoserver ltsc2025 78ff0c084746 4 days ago 469MB
python latest aaf6d53d74e8 3 weeks ago 7.55GB
openjdk 24 770aa29a0206 2 months ago 7.24GB
openjdk 23 7d7e50a177b9 8 months ago 3.62GB
openjdk latest 45a92b5760d1 2 years ago 3.44GB
PS C:\Windows\System>
这windows原生容器我没有找到能用GUI的方法,python安装包程序和java安装包程序都无法正常运行,但可以手动复制文件进去或者挂载目录进去用。
参考文档:
Running Windows and Linux containers without Docker Desktop