Windows Server 是否适合用 Docker?

2022-08-23 16:42:15 +08:00
 dream4ever

公司现有两台阿里云服务器,其中一台是七八年前买的,当时装的 Windows Server 2012 R2 。

后来新开了一台作为备用服务器,装的是 Windows Server 2019 with Container 数据中心版 64 位中文版。

之前也玩过 CentOS 和 Docker ,但是到了这台装了 Win 2019 的服务器上,发现 Docker 有各种问题。

一开始是无法下载基于 Linux 创建的 Docker 镜像,按网上搜的方法改了 Docker 的配置之后,这个问题解决了,但是又出现了无法用基于 Linux 的镜像来启动容器的问题了,Google 了一番,尝试了各种方法也没能解决问题。

现在就在想 Windows Server 是否适合用 Docker ?之前计划用 Docker ,是想让操作系统尽量“干净”,把 MySQL 、PHP 、Node.js 这样的软件安装在 Docker 中,就能够尽量少地影响操作系统。而且如果要升级软件的版本的话,或者需要在其他服务器上部署相同的软件环境,有 Docker 的话都会比较方便。

但是在 Docker Hub 上搜索了一下,MySQL 、PHP 、Node.js 都没有基于 Windows 创建的镜像。而公司的环境决定了目前没有这个人力和时间来把操作系统切换到 CentOS/Ubuntu 下。

PS:向公司申请付费购买云数据库之类的选择也暂不考虑,公司目前没有这个环境。

那么这是否意味着如果要用 Windows Server ,还是只能保持现状,将各类软件都直接安装到操作系统中?

3805 次点击
所在节点    Windows
18 条回复
Kinnice
2022-08-23 16:51:26 +08:00
不适合
littlewing
2022-08-23 16:51:32 +08:00
windows 下的 docker 就是装了个 linux 虚拟机,然后在 linux 上装的 docker 吧
或者你直接 hyper-v 装个 ubuntu ,然后跑 docker
Kinnice
2022-08-23 16:53:00 +08:00
用 Hyper-V 吧
BugCry
2022-08-23 16:57:24 +08:00
在 docker 里面用数据库,各位 DBA 怎么看?
ysc3839
2022-08-23 16:58:09 +08:00
云服务器的 Windows 不适合用 Linux Docker ,因为是在虚拟机里运行的,而云服务器本身就是在虚拟机中运行的 (除非是独立服务器),嵌套虚拟化的性能不一定好。
ltkun
2022-08-23 16:58:55 +08:00
docker 理论上是和操作系统没有关系的
不然也就失去了 docker 的意思
windows 的 WSL2 现在能很好的支持 docker 了
试过很方便 主要主力系统不是 windows 偶尔进去看看
前几天刚刚在 wls2 里面更新了 5.15 的内核
zilongzixue
2022-08-23 17:01:40 +08:00
https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP 可以是可以,不过生产数据库不建议上虚拟机
pannanxu
2022-08-23 17:12:12 +08:00
为什么不建议数据库放容器内
dream4ever
2022-08-23 17:17:07 +08:00
@pannanxu 性能会下降吧。
dcsuibian
2022-08-23 17:17:21 +08:00
还是直接装吧,先拿个虚拟机练手,把操作步骤记下来
如果熟悉 PowerShell 的话,再编个 Windows Container 的 Dockerfile
anubu
2022-08-23 17:17:39 +08:00
@ltkun Docker 不是虚拟机,理论上和操作系统强相关。原生运行的话,Windows 上的容器必须使用 Windows 版的镜像来创建运行,不是所有软件都有 Windows 版的镜像。
不过,大部分个人用户在 Windows 上使用的是非原生 Docker ,本质上是在 Windows 中创建一个 Linux 虚拟机,然后运行 Linux 版本的 Docker 。
ysc3839
2022-08-23 17:20:04 +08:00
@ltkun 你想表达的可能是 Docker 和 Linux 发行版没有关系,这基本是对的。但是 Docker 和系统内核是有关系的,Docker 依赖系统提供的容器相关的 API ,比如 macOS 没提供容器 API ,就没有 macOS Docker 镜像。Docker 里面运行的软件也是要依赖某一内核的,比如 Windows Docker 镜像不能在 Linux 下跑,Linux Docker 镜像在 Windows 下需要虚拟机。
timethinker
2022-08-23 17:21:23 +08:00
@pannanxu [生产] 数据库为了保证环境相对稳定,一般需要独占服务器,而且使用容器的主要目的在于部署和编排方便,但是数据库一般不需要频繁部署,因此也就没必要使用容器了。另外生产数据库为了使硬件资源利用率最大化,一般都会针对主机进行一些参数调优。
mmdsun
2022-08-23 19:40:08 +08:00
在 WSL 2 里面用 docker
ch2
2022-08-23 20:02:11 +08:00
完全没问题,windows 容器用起来跟 linux 区别不是很大
但是 k8s 支持不太行,很难装
不过你还得学一下 windows 的包管理软件 choco 跟 scoop 这些
INCerry
2022-08-24 10:43:49 +08:00
看来大多数 V 友还只用过个人版的 Docker Desktop ,而不知道生成环境中使用的 Windows Container
Docker Desktop 和 Windows Container 技术实现上有本质的区别,世界 500 强的生产案例也数不甚数

https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/
nothingistrue
2022-08-24 15:38:43 +08:00
Docker 本身不是虚拟化,它要依赖操作系统的,而 Windows 上的 Docker 还刚起步。另外,就算 Windows Docker 普及了,因为依赖操作系统,Linux 的镜像跟 Windows 的镜像也是没办法互通的。如果不考虑多机部署部分,Docker 的作用更像默认用户隔离的包管理器,不能把它当成虚拟机或者应用沙盒看待。

需要区分 Windows Docker 跟 Docker On Windows ( Docker Desktop 是两个都包含的),后者不管是早期的基于 Hyper-V 还是现在的基于 WLS2 ,它本质上都是开了一个 Linux 虚拟机然后运行 Linux Docker 。

如果是本机的 Windows Server ,安装 Docker Desktop ,最好是用 Hyper-V 而非 WSL2 模式,然后把它当成 Linux Docker 用就行了。或者干脆抛弃 Docker Desktop ,直接 Hyper-V Linux 虚拟机里面手动安装 Linux Docker ,配置好 Hyper-V 跟 Liunx 虚拟机的网络即可。如果是云上的 Windows Server ,要看云主机的虚拟化技术是啥,如果是 Hyper-V 那就跟本机区别不大,如果不是就会有性能损耗。
litguy
2022-08-24 16:50:48 +08:00
@pannanxu IO 密集型应用建议物理机部署,性能下降有点狠

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/874832

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX