In a previous post (https://enterpriseadmins.org/blog/virtualization/nested-vmware-workstation-lab-using-linked-clones/) I mentioned a nested ‘smash lab’ using VMware Workstation. This post will focus on a Photon OS VM with docker and nfs-server services enabled.
Occasionally there is a service that I may temporarily need in my lab, such as an SMTP server or web server, and those are readily available as docker container images. Therefore I decided to have a virtual machine available pre-configured for running docker images. After setting this up, I realized that it would also be convenient to have access to an NFS server that could be used as a shared datastore if needed. There were a couple of container images available for NFS server, but I decided to run NFS directly on this VM instead.
I started by downloading Photon OS 4.0 Rev2 from https://packages.vmware.com/photon/4.0/Rev2/ova/photon-ova_uefi-4.0-c001795b80.ova with virtual hardware v13 (UEFI Secure Boot). There were a few other versions available, but this was the latest available at the time.
Double clicking the OVA downlad starts the VMware Workstation import wizard, and asks for a name for the virtual machine. I went with
lab-dock-14 since this was going to be running docker and I planned to assign a static IP ending in .14. I adjusted the VM to use ‘VMnet10’ which is the isolated lab network and removed the floppy disk drive. I also decided to add a 50GB disk on SCSI 1:0 to use as a mount for the NFS server. Once the settings were how I wanted, I powered on the VM.
The initial login to the OVA uses
root/changeme and forces a password change. I set a password then configured networking by manually typing in the following:
cat > /etc/systemd/network/10-static-en.network << "EOF" [Match] Name=eth0 [Network] Address=172.16.10.14/24 Gateway=172.16.10.1 DNS=172.16.10.1 EOF
This defines my static IP address, points the default gateway and DNS to the lab side of the domain controller/NAT router. Now I just need to change permissions for the file and restart networking:
chmod 644 /etc/systemd/network/10-static-en.network systemctl restart systemd-networkd
From this point, I can use
ssh firstname.lastname@example.org from my jump server to login to the VM and start using copy/paste to do the rest of my configuration. The first step was to make sure all the packages were up to date with
I then defined my hostname with the command
hostnamectl set-hostname lab-dock-14.example.org and made sure this DNS A record was defined in my DNS server.
Docker is preinstalled on the Photon OS appliance, it just needs started & enabled at boot, so I did that with:
systemctl start docker systemctl enable docker
I wanted to make a
/data mount to use as an NFS server and potentially to store container configuration if needed. I confirmed which device I wanted to use by running
fdisk -l to list disks and confirmed that
/dev/sdb was the unused 50GB disk I added when configuring the VM. I ran
mkfs -t ext3 /dev/sdb to put a filesystem on the drive, created a directory with
mkdir /data, opened a text editor with
vi /etc/fstab and appended
/dev/sdb /data ext3 defaults 0 0 to the end of the file. After saving/exiting that file I typed
mount /data and confirmed that the new mount was available with
With the mount defined, I next needed to make it available via NFS. To do this, I first needed to install nfs-utils with
tdnf install nfs-utils. I then opened a text editor with
vi /etc/exports and added a single line to the file that says
/data *(rw,async,no_root_squash,insecure_locks,sec=sys,no_subtree_check). This says I wanted to make the
/data mount available to all hosts over NFS. After saving the file I ran the following commands:
exportfs -ra # this should return nothing, assuming the /etc/exports file is correct systemctl start nfs-server.service systemctl enable nfs-server.service
After doing this I attempted to mount the NFS export as a datastore on my nested ESXi host but was unsuccessful. After more troubleshooting than I care to admit, I realized that the firewall was enabled on my Photon OS appliance. For my purposes, I don’t really need the firewall enabled, so I disabled it and set it not to start automatically with:
systemctl stop iptables systemctl disable iptables
This solved the problem where I wasn’t able to mount the datastore. Depending on your environment it might be worthwhile to define the ports necessary for NFS, but as I was using NFS3 and that was many ports, this wholesale disabling of the firewall was quicker.
Once this was complete, I rebooted to ensure everything came up as expected (IP & hostname correct, Docker & NFS running, etc) and shutdown with
shutdown -h now. Once the VM was powered off, I created a new snapshot so this could be used as a
parent virtual machine for future linked clones.