Shrink dynamically extended VirtualBox image for export appliance

Cleanup your system System

Cleanup APT cache

sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*

Cleanup docker cache (Optional, if you need)

docker system prune -a -f

Uninstall snap (Optional, if you need)

sudo apt-get autoremove --purge snapd 

Cleanup Logs (Optional, if you need)

for f in $(find /var/log -type f); do 
    sudo cat /dev/null > $f;
    echo "  Log $f has been cleared";

Shutdown system and boot using ubuntu installation image.

After finish boot. Just press ALT+F2 switch to virtual terminal #2 end press Enter.

Set to zero free block using zerofree command.

sudo zerofree /dev/sda2

and shutdown your system

sudo shutdown -h now

Export Virtual Machine

Using export wizard.

command line interface

Check virtual machine name using vboxmanage list vms

vboxmanage list vms
vboxmanage export $VM_NAME -o $IMG_NAME

Replace $VM_NAME with virtual machine name did you want to export.

Replcae $IMG_NAME to output file name did you want. e.g. ubuntu-bionic-server.ova