%BI classes date back to Miner (DeepSee-1) and just were left in Caché over a decade at least
while its functionality was replaced by %DeepSee classes more than 10 years ago.

Of course, you can map all %BI.*  classes to some DB where you have R/W access and import it from Caché.
that's about 300 Classes.
BUT:  no one can tell you if they compile correctly
AND: you have to take care of the hidden %bi*.obj (~430) and other deployed code which you can't compile, but import and pray they work.

SO: this doesn't look like a  promising approach.

Therefore I'd suggest migrating from %BI to %DeepSee in Caché first and to IRIS next

SOAP is quite specific and critical to data format and structure.
You might extend it, but then Edge Server is the active part and you depend on its regular "broadcast".
If Doc Server should be the active partner I'd rather suggest to use JDBC in Linux.
Your actual $get might be embedded as a Method projected as SQL Procedure that you call.
There exist examples to even execute COS commands by that approach:
see: ObjectScript over ODBC

Your keywords >90% COS + SAMPLES indicate your background.
if you don't intend to win a prize in a contest adapting some CSP Samples will be fastest. Forget any ZEN.
And just call the CSP class. never the .CSP itself.
what I mean:
NOT http://localhost:56773/csp/samples/form.csp
BUT http://localhost:56773/csp/samples/csp.form.CLS

It's my quick and dirty approach

you are mixing things.
#1) working:
1.1 yo talk to login + authentication
1.2 you talk to command prompt that stores your code locally. 
#2) not working
 authentication from script is not supported, the rest goes nowhere
#3) not working examples
both assume that
3.1 you enter the code in Studio, VSCode, ...and COMPILE  it.
3.2 you call the compiled code from the command line

Hi @Scott Roth !
from my ~260+ reviews, I can confirm to you that Docker provides just the vanilla platform for 
demonstration and prepares genal settings (eg.REST)  and shuffles demo data.
But in 98% of those cases, the effective code is installed by ZPM.  
And if ZPM is not installed there is one of those famous 1-liners to install it  (with enough privileges).

To me, docker-compose is just a comfortable way to mix up ports, and volumes, to integrate the container with the environment outside the container.
I'm rather sure our well known Docker Experts have a related cookbook ready for publishing
(there was just no contest to win a prize for it and make money)

The real info on what to copy where is mostly in Dockerfile., which is called by docker-compose.