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

VSCode itself has support for git out of the box. So, with VSCode-ObjectScript, when you just starting to use it, you can export source code from your server, and you can send it to git. 

Join me the next week on the webinar, where I'm going to speak about using git in VSCode. Also, you can look at the recording of the recent webinar from Raj Singh

And in VSCode marketplace you can find extensions for many others SCM.

I have this in my settings.json file

  "workbench.colorCustomizations": {
    "activityBar.background": "#0079c9",
    "activityBar.activeBackground": "#0079c9",
    "activityBar.activeBorder": "#ff80cc",
    "activityBar.foreground": "#e7e7e7",
    "activityBar.inactiveForeground": "#e7e7e799",
    "activityBarBadge.background": "#ff80cc",
    "activityBarBadge.foreground": "#15202b",
    "titleBar.activeBackground": "#005a96",
    "titleBar.inactiveBackground": "#005a9699",
    "titleBar.activeForeground": "#e7e7e7",
    "titleBar.inactiveForeground": "#e7e7e799",
    "statusBar.background": "#005a96",
    "statusBarItem.hoverBackground": "#0079c9",
    "statusBar.foreground": "#e7e7e7",
    "statusBar.border": "#005a96",
    "titleBar.border": "#005a96"
  },

This is not a part of this extension, it's just goes from VSCode itself, and marketplace can offer some extensions which can help with easy configuration of it.

As to your task, the same task will be much easier to implement in VSCode.

If you have read the article provided above, and maybe would saw the webinar by Raj Singh very recently, where he said, that VSCode will have support through WRC quite soon when we'll reach the stable version 1.0.

  • You installed IRIS or Caché at least, so, just a couple of more installs, to make you more productive.
  • It has the documentation.
  • Yes, you can also have multiple connections, it's a bit tricky there, but possible. As soon as you understand why you really need it.
  • You can change any colors in VSCode as you would like, just from the settings
  • VSCode has support for GIT out of the box, while in Studio there are not ways, how to do it very simple
  • You can ask any questions about using VSCode extension here, some small fixes I'm releasing quite quickly. 

Studio as well as Atelier, will not get any big improvements anymore, just only to keep it working with the newest version. While VSCode is in active development and will get a lot of new features, which will not be available in Studio.

There are multiple ways, just use Create method directly on classes Security.Roles, and Security.Users

do ##class(Security.Roles).Create(Name, Description, Resources, GrantedRoles)
do ##class(Security.Users).Create(UserName, Roles, Password)

Or, you can use %Installer manifest

<Resource
    Name="%accounting_user" 
    Description="Accounting"
    Permission="RW"/>
<Role 
    Name="%DB_USER"
    Description="Database user"
    Resources="MyResource:RW,MyResource1:RWU"
    RolesGranted= />
<User 
    Username="Clerk1"
    PasswordVar="clerk1pw"
    Roles="Dataentry"
    Fullname="Data Entry Clerk"
    Namespace=
    Routine=
    ExpirationDate=
    ChangePassword=
    Enabled=
    Comment=""/>