InterSystems itself does not have to support access via ssh, it's just a task for OS.

Could you have a look at Theia-IDE? This is a web-based alternative for VSCode, and there you already should be able to install extension VSCode-ObjectScript. This can be installed on the server, and you will have access through the web as you trying to do with WebTerminal. Would it work for you, your customers? It may not work so well as it works in VSCode, but, I think we are going to dive into it. VSCode itself developed by Microsoft, and they already offer it online as well, but on their Azure platform.  

With VSCode right now you can access your servers remotely via the web, where you can use SSL. If your server 2016.2+

First of all, you should not think, that using docker is the same as you would install it natively. You have to build your own per-project environment with docker. 

Where to find information

In addition, you would need a code editor, and you can use cross-platform VSCode with extension VSCode-ObjectScript. Brief info about how to install and configure it on Learning.

In the context of complex docker images, one more feature worth to be mentioned. It is multi-stage builds. It makes sense when you have to do some build something in your project, but you don't need any immediate files, for instance, source code, or any temporary files. Or some part of your app written in the compilable language, like go, and you can't compile it let's say it on IRIS image. You can first run go image, build it, and then build your final image base on IRIS where you just copy the result from the first stage.

In case of IRIS, you can build this way, deployable code. Just build your application from source code, deploy, and copy the result to the fresh image, and it will keep you from the error of letting your source code go with the final image.

There is no such way as merging two images. If you need only one image, the only way is to make a new one, which would combine the main from both images. So, you should choose which one is going to be as a base image, I would suggest it supposed to be IRIS. Then you can create install inside nodejs, and your node application. The issue is here you may face is that you will have only one init process after that. While I suppose you have to have started IRIS and NodeJS application at the moment. You can add a script which will run in a background nodejs application, and pass it to iris-main through CMD directive in conjunction with '-a', '-b', '-c' or '-t' parameter
So, it can be something like this

FROM intersystestems/iris:2020.2.0.204.0

USER root 

# script which will run nodejs application in background
COPY app-entrypoint.sh /

# copy your nodejs application
COPY ./nodeapp /opt/nodeapp

# install nodejs v10, and node_modules
RUN apt-get -y update && \
 DEBIAN_FRONTEND=noninteractive apt-get -y install curl --no-install-recommends && \
 curl -sL https://deb.nodesource.com/setup_10.x | bash - && \
 DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs --no-install-recommends && \
 rm -rf /var/lib/apt/lists/* && \
 chmod +x /app-entrypoint && \
 cd /opt/nodeapp && \
 npm install

USER ${ISC_PACKAGE_MGRUSER}

# say to start your nodejs application after IRIS start
CMD ["-a", "/node-entrypoint.sh"]

I have recently implemented SAML Authentication for one of the projects where I participated, with some SAML providers. I have not tested it with Shibboleth, but with some online providers, including GSuite. It's not so difficult actually and can be solved with SAML classes already implemented in IRIS for SOAP.

But this is the only Authentication, while SAML supports also supports provisioning, which I have not Implemented at the moment.

$listvalid

%SYS>w $listvalid($lb("test"))
1
%SYS>w $listvalid("test")     
0
%SYS>w $listvalid("")    
1

$listbuild is not an object, so, it's not a check as an instance of, it is only possible that variable is valid as $listbuild

$listbuild as just a string with a special format, so, that's why this will also return true

%SYS>w $listvalid($char(1))   
1
%SYS>write $lb()=$c(1)
1

because

%SYS>zzdump $lb()  

0000: 01                                                      .

So, to get own docker-running Cache, is quite easy.

You just need docker desktop installed on your mac. Then when it installed, and running. You'll be able to run it from the terminal by command.

docker run -d --name cache \
  -p 1973:1972 \
  -p 57773:57772 \
  -v $HOME/cache.key:/usr/cachesys/mgr/cache.key \
  daimor/intersystems-cache:2018.1

It supposed that you have valid cache.key in your home directory. And that your ports 1973 and 57773 is free to use. If you would like to change the port just change 1973 and 57773 with any you'd like to use.

This command will download the image (daimor/intersystems-cache:2018.1) from the public repository, and run it in the background.

You can control the running container by commands, wherein all subsequent commands cache is the name of the container from the docker run command.

To see cconsole.log of the container.

docker logs cache

To look at the status of the container

docker ps cache

Stop running container

docker stop cache

This is just an empty instance, to look at how it works. In the real case scenario, some more work should be done.

Docker images for Cache or for Ensemble are provided by me, and it is available for different versions.

Nowadays is best to migrate to IRIS, and use official images provided by InterSystems itself.

And the next step for you would be to use an editor that can be run on macOS, instead of Studio which working only on Windows.  

And you can use VSCode editor with an extension VSCode-ObjectScript, developed by me. 

I would recommend reading here articles tagged by Docker. There much more information about how to best use it. 

As well as about using VSCode.

You can contact me directly, if you need any help with establishing development process, with such modern tools as Docker and VSCode. or migrating to IRIS.

It's great that you trying to do it.

But I'm not sure what you actually going to achieve with WebGateway?

A provided link has info about running in docker.

So, if you just want to activate server-status page in internal apache which goes with IRIS, you should know, that it is not recommended to use internal webserver in production.

Some time ago I did an example of Apache with CSPgateway as a docker image. It can be outdated a bit but can be used as an example, how to achieve it. You can easily extend Apache settings there, to allow server-status as well.

Yeah, I forgot about docker. But it is possible to solve this as well. 

Connect to the instance with SSH in any way offered by Google.

cd /opt/ISC
sudo vi docker-compose.yml

So, you can now add more ports. Save it (:wq)))

sudo docker-compose up -d

Do not forget to configure firewall rules.

You can even add this line, and remove ports block at all, and get access to any future ports without a restart container.

network_mode: host