## Description
Working dockerfile generation for typescript express services
## Test plan
```
> cr --bin suiop -- d g --runtime ts --path /tmp/docker
Blocking waiting for file lock on build directory
Compiling suiop-cli v0.2.0 (/Users/jkjensen/mysten/sui/crates/suiop-cli)
Finished dev [unoptimized + debuginfo] target(s) in 30.63s
Running `/Users/jkjensen/mysten/sui/target/debug/suiop d g --runtime ts --path /tmp/docker`
2024-05-07T15:51:11.767616Z INFO suioplib::cli::docker: Generating Dockerfile for Typescript in "/tmp/docker"
```
```
> docker build -t jk-exp-0 -f /tmp/docker/Dockerfile . && docker run -p 8080:8080 jk-exp-0
[+] Building 2.5s (20/20) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.80kB 0.0s
=> [internal] load metadata for docker.io/library/node:18.17.1-bookworm-slim@sha256:e5c8c319 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [builder 1/9] FROM docker.io/library/node:18.17.1-bookworm-slim@sha256:e5c8c319295f6cbc28 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 180.95kB 0.1s
=> CACHED [builder 2/9] WORKDIR /app 0.0s
=> CACHED [builder 3/9] RUN apt -qq update && apt -qq upgrade -y && apt -qq install -y npm & 0.0s
=> CACHED [builder 4/9] COPY --chown=node:node . /app 0.0s
=> CACHED [builder 5/9] COPY --chown=node:node src/ ./src 0.0s
=> CACHED [builder 6/9] COPY --chown=node:node package.json package-lock.json tsconfig.json 0.0s
=> CACHED [builder 7/9] COPY --chown=node:node src/ ./src/ 0.0s
=> [builder 8/9] RUN npm ci --omit=dev 1.1s
=> [builder 9/9] RUN npm run build 1.3s
=> CACHED [stage-1 2/7] RUN apt -qq update && apt install -y wget 0.0s
=> CACHED [stage-1 3/7] RUN wget -O /usr/local/bin/dumb-init https://github.com/Yelp/dumb-in 0.0s
=> CACHED [stage-1 4/7] RUN chmod +x /usr/local/bin/dumb-init 0.0s
=> CACHED [stage-1 5/7] WORKDIR /app 0.0s
=> CACHED [stage-1 6/7] COPY --chown=node:node --from=builder /app/dist ./js/ 0.0s
=> CACHED [stage-1 7/7] COPY --chown=node:node --from=builder /app/node_modules/ ./node_modu 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:9d204e51b9f428b750f3771e832690d5b44a39f724d10b213b0fdc82d4c530aa 0.0s
=> => naming to docker.io/library/jk-exp-0 0.0s
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview
Server is Successfully Running, and App is listening on port 8080
```
---
## Release notes
Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.
For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.
- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] Indexer:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK: