我运行 vmware 工作站来满足我的开发需求,并且必须为不同的环境维护不同的虚拟机。
Docker 似乎允许在容器中运行不同的环境,因此
我可以在 Windows 10 x64 VM 中运行 docker 并使用不同的映像和容器来开发、构建和测试我的代码吗?(请记住,我在 VMware Workstation 中运行我的开发环境,而 docker 使用 VirtualBox)
我如何将我的应用程序(代码+数据库+Web API+......)运送/带到生产环境?生产机器是否需要运行docker?
请帮忙澄清一下。
更新
我所说的 VMWare 是指 VMWare 工作站专业版。
答案1
是的,完全可以在 Linux VM 中运行 Docker。Docker 是一种轻量级虚拟化解决方案,它不会虚拟化硬件,因此您不会受到嵌套 VM 的典型问题的影响。
但是端口绑定可能有点棘手,因为您必须以某种方式将 VMware 中的 dev-env VM 与 VirtualBox 中的 Docker VM 连接起来。
如果您想将主机的文件夹公开给 Docker 容器中的服务,也可能会遇到问题。与 Linux 相比,Windows 的文件系统在权限粒度方面受到限制,有些服务不喜欢这样。(这个问题不是 Docker 特有的)
一般来说,您的应用在生产中并不局限于 Docker。Docker 化服务通过网络与外界通信,与常规服务通常所做的没什么不同。但是,以 Docker(或更一般地说,云)为设计理念的应用可能更能抵御故障,也更易于维护。
带有 Windows 客户机的 VM可能无法工作,因为 Windows 上的 Docker 使用虚拟化来托管另一个 Linux VM。嵌套虚拟化不受官方支持。
答案2
本博客详细介绍了如何在 Windows 上通过 VMWare Workstation 使用 Docker。您甚至可以使用 Windows 7。
https://stefanscherer.github.io/yes-you-can-docker-on-windows-7/
首先安装适用于 Windows 的 Chocolatey 包管理器(这是一个单行命令)
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
然后安装Docker 以使用 VMWare 工作站
choco install -y docker
choco install -y docker-machine
choco install -y docker-machine-vmwareworkstation
创建默认虚拟机
docker-machine --native-ssh create -d vmwareworkstation default
设置环境变量
docker-machine env | iex
现在您已一切准备就绪,可以开始了。
答案3
- 是的,您可以在 Windows 上运行 docker。VMWare 上的 Windows 也可以运行。我们在 VMWare 上的 Linux 服务器上运行 docker。
- 最聪明的做法是将 docker 也安装在生产机器上,但这样也可以将数据从容器中复制出来。但我不建议这样做。
您可以使用docker save
它将 docker 镜像保存到文件中。
我认为值得一提的是,不建议在同一个容器内运行多个应用程序,也不建议将数据存储在容器内,您应该使用卷来实现这一点。
答案4
Docker 主机(Linux 或 Windows)之间存在以下主要区别:
- 这Linux 主机不需要任何虚拟化技术因此在 Vmware 工作站中,您可以安装标准 Linux,然后安装 docker 引擎并运行任何容器而不会出现问题
- 这Windows 主机有不同的要求,因为它在底层创建了一个 Hyper V Linux VM(详细信息https://rancher.com/the-similarities-and-differences-between-windows-and-linux-containers/)
因此,在 Vmware Workstation 中的 Windows docker 主机上(在您的物理 Windows 上),您有一个嵌套的 HyperV Linux VM!这不是什么大问题,只要小心启用嵌套虚拟化即可。
弗朗索瓦