Blenders *.blend is basically a file dump, it saves project settings, options and properties, restoring them upon reopening a file. Generally excluded from this are images and other externally referenced data. For these Pack can be used, turning the *.blend into a self-contained archive. Here assets can be included by packing the entire contents of a project into a file (‘global’ packing), or doing so selectively (‘local’ packing).
Design note: there is no particular difference between the ‘global’ and ‘local’ approaches to inclusion except the control each provides over the operation, i.e. including ‘all’ versus ‘selected’. Neither is inherently better than the other.
To pack the entirety of a project into the *.blend, from the File menu simply select External Data  then Pack All Into .blend  – File » External Data » Pack All Into .blend. All available assets and data will be saved to the open .blend file (saves over the active file), a confirmation message appearing in the Status Bar once the package process is complete.
Important: before packaging assets and data into the open *.blend file make sure it is ‘prepped’ to exclude unused, unwanted or orphaned assets and data else they will be inadvertently included – for large projects this can cause significant bloat. Note also large files may not be packable due to their size.
Design note: to unpack assets included in a packaged *.blend file, from the File menu select External Data then Unpack All Into Files – File » External Data » Unpack All Into Files. This then unpacks the files and drops them into their respective locations, folders and directories being created as needed.
To pack specific assets of parts of a project the process differs slightly depending on the data to be included. For images, once external data has been locally mapped and is available , as a part of a material for example, in UV Editing workspace or Image Editor, open the Sidebar – View » Sidebar or press N. Here, in the Image tab  click the ‘package’ icon  to the left of the File Name input field (displays the name of the selected asset). The button will change indicating the asset is now packed and ready for saving to the *.blend.
Design note: the option to pack data typically appears in the Sidebar wherever external assets can be accessed for editing or assignment, e.g. UV Editing workspace, Image Editor, Shading workspace etc. Similarly make sure the asset to be packed is selected [a] then in the Item [b] tab (differs from the Image tab when using UV Editing workspace or Image Editor) click the ‘Pack’ icon to the left of the File Name [c] input box.
To unpack selected assets, in an editor or area able to access the specific item, click the Unpack [d] icon and select an option – Remove Pack, Create [asset path] or Use [asset path]. Blender will then either save the unpacked asset to disk or use any identical assets where available (assumes same ‘path\to\asset\[file.*].
Packaging individual assets into a *.blend has to be done selectively – in the workspace, editor or area of choice make sure the item to be packed is selected  then in the Image tab of the Sidebar  click the ‘Pack’ icon to the left of the File Name  input box.