As far as I know, for running a full node, we should have enough storage to store the whole block chain which is currently around 390 GB.
That's not correct. Bitcoin Core can run in pruned mode, where it downloads, processes, and verifies all blocks, but then discards them, only keeping the UTXO set and the last few hundred blocks.
A few features are unavailable in pruned mode. Obviously a pruned node cannot serve the full blockchain data to other nodes that are synchronizing, making them "leeches" in a way. Though so far, there seems to be no lack of full nodes that do serve the full chain.
Another unavailable feature is rescanning. This is only needed if you're importing an old backup of a wallet. In non-pruned mode, the wallet code can just go over all blockchain transactions to find any that may have paid it (or spent coins from it), and find its latest state. In pruning mode this is not possible, and you'd need to download all block data again.
But here at the official bitcoin.org the minimum hard-disk is mentioned as 7 GB for running a full node. How is it possible?
Running in pruned mode needs a few GB for the UTXO set, and this value may of course grow over time, but the growth much slower than the blockchain ifself.
A side question: I have a virtual server with 100 GB capacity, and I wanted to run a full node. Can I run a full node with 100 GB storage?
Running in pruned mose should be perfectly feasible.