Look at the project mentioned earlier.
This part

{
  "folders": [
    {
      "name": "main",
      "path": "."
    },
    {
      "name": "part1",
      "path": "part1"
    },{
      "name": "part2",
      "path": "part2"
    }
  ]
}

Mentions three folders, where part1 and part2 supposed to be used to connect to two different servers. And each folder, have own .vscode/settings.json, which contains own settings to the server.

VSCode-ObjectScript extension which I suppose you already use, support the way, to work at the same time with multiple connections. And Mathew, gives you an example how to configure it. Look at the project. Important file there is multi.code-workspace, it's a kind of project file for VSCode, where is defined two folders, and each of those folders has its own separate settings for InterSystems. So, it means each folder will have its own connection to its own server. And you can configure as many connections as you would like. With the next release, I think it will be available one more way how to achieve the same.

First of all, I have to investigate it by myself, so, I would have something specific to ask through WRC. At the moment, the issue I see now only on cached quires. We build our application, as separate database files with only deployed code, which we deliver to customers. And we run our tests, in the way as it works on the customer's side. The same deployed code, and for sure without cached queries.

I've already found this qualifier, and it actually does not make any difference for us.  Cached query-classes, go to %sqlcq package, where it's mapped, definitely not with our code, and it also contains namespace, which will be different on the customer's side. Another solution would be to just rebuild all cached query, in the application. How it would be possible to do? As I said earlier, we test our queries for performance regressions, and not only queries, everything, and as we don't have any cache at all when we start our tests, our tests now became useless. How we can trust test's results, while the part of performance regression is just a compilation for SQL queries?

So, we have to somehow warm our application.

Writing own class queries just restore changes things, which was ok on the previous  versions not an option at all even we would have much less such queries. As We don’t going to use sharping we would better to deliver our application as we did it for Caché.

We need one place where we could change the way.

We also use UnitTests, and as part of our tests we test for performance regression, and now we get some tests failed due to significant performance regression. So now we have to spend time on investigation why it’s happening. I should expect better performance when I migrate between versions, but our automatic tests doesn’t show it.

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"]