I'm not sure I understand the use case for installing SSH when docker exec is already available:

  • Running an IRIS session:
    • docker exec -it iris iris session IRIS
  • Starting a shell:
    • docker exec -it iris bash
  • Starting a shell as root (in an IRIS container with "Normal" security):
    • docker exec -it --user=root iris bash

These commands can be run from a machine other than the host:

  • docker --host=tcp://35.231.179.51:2376 exec -it iris bash

They can be run securely from an outside machine by configuring docker to use TLS:

  • docker --host=tcp://35.231.179.51:2376 --tls --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem exec -it iris bash

In what situations would SSH be preferable?

I've always used "%Extends" for this purpose:

Write $classmethod(subclass,"%Extends",superclass)

Both methods scan the entire inheritance tree, but in the case of multiple inheritance, "%IsA" only finds primary superclasses, whereas "%Extends" finds all superclasses.

For example, consider the following class:

Class Ens.BusinessService Extends (Ens.Host, Ens.Util.IOLogger)

And the corresponding output:

ENSEMBLE>zw $classmethod("Ens.BusinessService","%IsA","Ens.Util.IOLogger")
0
ENSEMBLE>zw $classmethod("Ens.BusinessService","%Extends","Ens.Util.IOLogger")
1

More information about the difference between the two methods is discussed here.