Vmware虚拟机作为Docker宿主+端口穿透转发
Vmware虚拟机作为Docker宿主+端口穿透转发
Why
在Windows上直接使用docker-desktop需要WSL, WSL需要开启Hyper-V, Hyper-V是Type1 虚拟化,开启后对宿主Windows有性能损失~~(影响我打游戏)~~, 而Type2的Vmware不会。当然影响不大,但不妨碍我折腾。
参考文章:https://salesforcedevops.net/index.php/2020/01/24/make-a-docker-host-fast-and-easy-with-vmware-esxi-and-photon-os-3/ (不过这篇使用ISO,我们使用OVA)
下载photonOS镜像
download:
https://github.com/vmware/photon/wiki/Downloading-Photon-OS
OVA_version:
https://packages.vmware.com/photon/5.0/GA/ova/photon-hw15-5.0-dde71ec57.x86_64.ova
下载后直接在Vmware中打开就能导入,默认用户root,密码changeme,第一次登录后会要求修改。
扩展磁盘空间
photon-os默认根目录空间15GB,对于大一点的镜像不够。参考这个链接文档扩展磁盘大小:
在Vmware虚拟机设置中扩展虚拟磁盘大小。
启动photon,执行如下命令:
1 2 3 4 5 6
# 重新扫描磁盘 echo 1 > /sys/class/block/sda/device/rescan # 使用tdnf安装parted软件包 tdnf install parted # 使用parted打开sda parted /dev/sda
在parted交互环境内输入print,然后按提示修复GPT分区表以使用所有磁盘空间
上述命令会显示当前的所有分区和编号,除grub外默认ext4是第2个分区,将其扩展以使用全部空间:
1
(parted) resizepart 2 100%
退出parted,使用resize2fs扩展文件系统:
1
resize2fs /dev/sda2
最后可用
df -h
检查
Pull代理设置
首先需要你在宿主机具有一个开启了允许局域网连接的代理客户端。
参考官方文档设置docker pull 代理:
在虚拟机创建/etc/systemd/system/docker.service.d/http-proxy.conf
,配置如下内容:
|
|
注意一部分代理软件用于HTTPS_PROXY的协议仍然是HTTP。
然后重启docker服务:
|
|
然后才能开始pull。
网络端口设置
如果需要在宿主机局域网内访问docker容器内的服务,需要配置两层端口转发:
- 宿主机(Windows)->虚拟机(Photon)
- 虚拟机(Photon)->docker容器
宿主机->虚拟机
OVA导入时默认桥接,处于LAN内的机器可以直接,但是与主机IP不同,为了在外连接时不用多记一个ip,这里改成采用NAT模式+端口转发。
如果是Workstation版本可以直接使用菜单-编辑-虚拟网络编辑器。
对于VmwarePlayer,需要修改文件:C:\ProgramData\VMware\vmnetnat.conf
。
例如我们希望外部连接宿主机的[hostPortA]
端口时,自动转发到:
|
|
注意:Vmware Player更新后会覆盖该文件。
宿主机增加防火墙规则允许外部Inbound 连接到端口[hostPortA]
:。
|
|
重要:最后需要重启vmnat服务(CMD):net stop "VMware NAT Service"&net start "VMware NAT Service"
,仅重启电脑无效。
虚拟机->docker容器
在创建容器时配置端口转发,例如将虚拟机的2222端口转发到容器的22端口。
注意-p端口参数一定要在image name前面。
|
|
可以查看docker程序监听端口来验证: netstat -tuln | grep 2222
查看iptables 规则确认允许2222入站:iptables -L -v -n
外部SSH分别登录虚拟机/docker容器
追加编辑虚拟网络,或修改文件:C:\ProgramData\VMware\vmnetnat.conf
:
|
|
同样需要追加设置防火墙入站允许规则。
此时在局域网内SSH连接宿主机的[hostPortA]
端口则登录到虚拟机Photon;若连接 [hostPortB]
端口则穿透登录到docker容器。
杂项设置
开机启动docker的特定容器
|
|
允许SSH登录root
解决SSH时 docker环境变量与直接登录不一致
参考:
https://xuxinkun.github.io/2019/03/12/docker-env/
添加如下内容到~/.profile
:
|
|