Replace needs to handle a bunch of cases.  A goal for replace is to avoid changing IP addresses and port bindings within the app (requiring environment variable changes to be pushed out).  However, if the endpoints within the gear change, there may not be a direct change.  Replace also keeps data locality - we don't need to copy the transient data directory of mysql from node to node if replace is in the same id/gear mountings.   However, the mount points of a cartidge can change from image to image.  Docker doesn't directly support switching out an image for a process and starting another image with the same mounts / user / network bindings, but folks have asked for it.  It's worth describing the complexity of replace in the PEP, and adding enough detail so that someone can follow up to determine the right outcome.