作为最好的虚拟机软件之一,VMware Workstation
是专为 Linux
和 Windows
系统设计的,为了照顾 Mac 平台的用户,VMware 原班人马又打造了 VMware Fusion
,与 Workstation 体验基本一致。
现在 VMware Fusion 迎来了重大更新,可以直接使用 Docker
镜像启动容器,还可以构建镜像、推送镜像到镜像仓库,不需要安装 Docker Desktop
。为了这个功能,VMware Fusion 专门创建了一个新的 CLI
工具:vctl
,它包含在 VMware Fusion 中,安装好了之后就有这个命令了。
通过下面的链接下载安装最新版 VMware Fusion:
Download[1]
序列号什么的自己网上找一下就好了,我不方便提供。。
vctl
(代码名称:Nautilus 项目)是一个捆绑在 VMware Fusion 应用程序中的命令行实用程序,用于管理容器。大多数 vctl
命令选项可在 Fusion 和 Fusion Pro 中使用。但是,--publish
选项仅适用于 Fusion Pro。
相关的二进制文件/组件捆绑在 Fusion 应用程序中,可在 Applications/VMware Fusion.app/Contents/Library/vkd/ 文件夹中找到这些内容。主要包括以下三个二进制文件:
这是一个在后台运行的容器运行时守护进程。必须先启动 containerd
守护进程,然后才能运行任何与容器相关的操作。要启动该守护进程,请使用 vctl system start
命令,要停止该守护进程,请使用 vctl system stop
命令。
启动新容器时,将启动一个新的 containerd-shim-crx-v2
进程,该进程将充当 CRX
虚拟机中的容器与 containerd
守护进程之间的适配器。
这是一个在前台运行的命令行实用程序,它可以将用户输入转发到 containerd
守护进程,和 containerd 进程进行交互,类似于 crictl
的功能。
vctl 运行的每个容器都跑在一个称作『CRX』虚拟机的轻量级虚拟机内。默认情况下,
CRX
虚拟机在容器启动时创建并启动。容器停止时,将关闭并移除该虚拟机。CRX
虚拟机的名称与容器的名称相同。
在使用 vctl
操作容器之前,必须先启动 containerd
容器运行时。容器运行时不会在 VMware Fusion 应用程序启动时自动启动,也不会在 VMware Fusion 应用程序退出时自动停止,必须手动启动和停止。实际上也并不需要打开 VMware Fusion。
首先在终端中执行以下命令来检查容器运行时的状态:
$ vctl system info
Container runtime is stopped.
Use 'vctl system start' to start.
Container runtime path: /Applications/VMware Fusion.app/Contents/Library/vkd/bin/containerd
Log file: not set
Log level: info
Config: not set
Virtual machine CPU (cores): 2
Virtual machine memory (MB): 1024
Host network:
DMG file: not set
Storage mount point: /.vctl/storage
然后启动容器运行时(需要输入管理员密码):
$ vctl system start
Preparing storage...
Container storage has been prepared successfully under /.vctl/storage
Preparing container network, you may be prompted to input password for administrative operations...
Container network has been prepared successfully using vmnet: vmnet9
Launching container runtime...
Container runtime has been started.
列出网络设备:
$ vmrun listHostNetworks
Total host networks: 4
INDEX NAME TYPE DHCP SUBNET MASK
0 vmnet0 bridged false empty empty
1 vmnet1 hostOnly true 192.168.22.0 255.255.255.0
8 vmnet8 nat true 192.168.31.0 255.255.255.0
9 vmnet9 nat true 192.168.134.0 255.255.255.0
启动容器运行时后,就可以操作容器和镜像了。先拉取一个镜像试试:
$ vctl pull nginx:alpine
INFO Pulling from index.docker.io/library/nginx:alpine
─── ────── ────────
REF STATUS PROGRESS
─── ────── ────────
index-sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Done 100% (1645/1645)
manifest-sha256:ee5a9b68e8d4a4b8b48318ff08ad5489bd1ce52b357bf48c511968a302bc347b Done 100% (1360/1360)
layer-sha256:c4a057508f96954546441044f0d2373303862a4d4accc163e68a4c30d0c88869 Done 100% (668/668)
config-sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270 Done 100% (8026/8026)
layer-sha256:cbdbe7a5bc2a134ca8ec91be58565ec07d037386d1f1d8385412d224deafca08 Done 100% (2813316/2813316)
layer-sha256:10c113fb0c778963cb3069e94e8148a3770122f6763c94373e22f5342b503ab0 Done 100% (6460970/6460970)
layer-sha256:9ba64393807bf2549af97a1a074ca5fff1bce25ad115b0a7ced446cd1b4305d0 Done 100% (538/538)
layer-sha256:262f9908119d4529a370bcdf1f1306131ad556edf400413d5fa74008d7919931 Done 100% (899/899)
INFO Unpacking nginx:alpine...
INFO done
$ vctl images
──── ───────────── ────
NAME CREATION TIME SIZE
──── ───────────── ────
nginx:alpine 2020-06-08T17:05:15+08:00 8.9 MiB
是不是有种熟悉的味道?跑一个容器试试:
$ vctl run -d --name mynginx nginx:alpine
INFO container mynginx started and detached from current session
$ vctl ps
──── ───── ─────── ── ───── ────── ─────────────
NAME IMAGE COMMAND IP PORTS STATUS CREATION TIME
──── ───── ─────── ── ───── ────── ─────────────
mynginx nginx:alpine /docker-entrypoint.s... 192.168.134.129 n/a running 2020-06-08T17:16:11+08:00
可以看到其资源占用非常低:
这一步神奇的事情就发生了!当容器被启动时,它的 rootfs
会被挂载到宿主机上,这就意味着我们可以直接使用 Finder 来浏览容器里的内容,并实时修改,就像在宿主机里编辑文件一样,简直太爽了!
查看容器详细信息:
$ vctl describe mynginx
Name: mynginx
Status: running
Command: /docker-entrypoint.sh nginx -g daemon off;
Container rootfs in host: /.vctl/storage/containerd/state/io.containerd.runtime.v2.task/vctl/mynginx/rootfs
IP address: 192.168.134.129
Creation time: 2020-06-08T17:16:11+08:00
Image name: nginx:alpine
Image size: 8.9 MiB
Host virtual machine: /.vctl/.r/vms/mynginx/mynginx.vmx
Container rootfs in VM: /.containers/mynginx
Access in host VM: vctl execvm --sh -c mynginx
Exec in host VM: vctl execvm -c mynginx /bin/ls
进入容器:
$ vctl exec -it mynginx sh
/ # ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:0c:29:8c:90:ad brd ff:ff:ff:ff:ff:ff
inet 192.168.134.129/24 brd 192.168.134.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe8c:90ad/64 scope link
valid_lft forever preferred_lft forever
3: dummy0: mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 12:50:93:b9:b0:b9 brd ff:ff:ff:ff:ff:ff
进入虚拟机:
$ vctl execvm --sh -c mynginx
sh-4.4# uname -a
Linux 4.19.84-1.ph3-esx #1-photon SMP Tue Nov 19 00:39:50 UTC 2019 x86_64
sh-4.4# uname -r
4.19.84-1.ph3-esx
sh-4.4# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope: Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:751 TX bytes:751
eth0 Link encap:Ethernet HWaddr 00:0c:29:8c:90:ad Driver vmxnet3
inet addr:192.168.134.129 Bcast:192.168.134.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe8c:90ad/64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:194 TX bytes:1572
不得不说,VMware 真是越来越会玩了,不断地自我革命,其中 VMware Tanzu
就是为拥抱 Kubernetes 而进行的自我革命,它将 Kubernetes
控制平面直接集成到 ESXi
和 vCenter
中,使其成为 ESXi
的控制平面,并通过 vCenter
提供以应用为中心的管理功能。现在连家用的 Fusion 也推出了容器管理的功能,可以想象,未来软件世界将会被容器所吞噬。
VMware Fusion 11.5: Now With Container Support[2]
使用 vctl 命令管理容器[3]
[1]
Download: http://vmware.com/go/getfusion
[2]VMware Fusion 11.5: Now With Container Support: https://blogs.vmware.com/teamfusion/2020/05/fusion-11-5-now-supports-containers.html
[3]使用 vctl 命令管理容器: https://docs.vmware.com/cn/VMware-Fusion/11/com.vmware.fusion.using.doc/GUID-78E7339F-7294-4F3E-9AD0-1E14C201FA40.html
你可能还喜欢
点击下方图片即可阅读
云原生是一种信仰 ????
扫码关注公众号
后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!
点击 "阅读原文" 获取更好的阅读体验!
❤️给个「在看」,是对我最大的支持❤️