Skip to content

Commit 43e6f98

Browse files
refactored a Dockerfile.dev
1 parent aa67371 commit 43e6f98

File tree

2 files changed

+96
-85
lines changed

2 files changed

+96
-85
lines changed

Dockerfile

Lines changed: 9 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,11 @@
1-
###
2-
# Optimized multi-stage Dockerfile for mongodb-mcp-server
3-
#
4-
# Build args:
5-
# NODE_VERSION Node.js version (default 22-alpine)
6-
# INSTALL_DEV Keep dev dependencies (true|false, default: false)
7-
# RUNTIME_IMAGE Base runtime image (default: node:22-alpine)
8-
#
9-
# Typical build:
10-
# docker build -t mongodb-mcp-server:local .
11-
# docker build --build-arg INSTALL_DEV=true -t mongodb-mcp-server:dev .
12-
#
13-
# Runtime (stdio transport):
14-
# docker run --rm -it mongodb-mcp-server:local --transport stdio
15-
#
16-
# Runtime (http transport):
17-
# docker run --rm -p 3000:3000 mongodb-mcp-server:local --transport http --httpHost 0.0.0.0
18-
# curl -s -X POST http://localhost:3000/mcp -H 'Content-Type: application/json' \
19-
# -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{}}}'
20-
#
21-
# Optional HTTP auth (Azure Managed Identity):
22-
# docker run --rm -p 3000:3000 \
23-
# -e MDB_MCP_HTTP_AUTH_MODE=azure-managed-identity \
24-
# -e MDB_MCP_AZURE_MANAGED_IDENTITY_TENANT_ID=<tenant-guid> \
25-
# -e MDB_MCP_AZURE_MANAGED_IDENTITY_CLIENT_ID=<app-client-id> \
26-
# mongodb-mcp-server:local --transport http --httpHost 0.0.0.0
27-
###
28-
29-
# syntax=docker/dockerfile:1.7-labs
30-
31-
ARG NODE_VERSION=22-alpine
32-
ARG RUNTIME_IMAGE=node:${NODE_VERSION}
33-
ARG INSTALL_DEV=false
34-
35-
#############################################
36-
# Builder Stage
37-
#############################################
38-
FROM node:${NODE_VERSION} AS builder
39-
WORKDIR /app
40-
41-
# Leverage Docker layer caching: copy only dependency manifests + tsconfigs first (needed by build scripts)
42-
COPY package.json package-lock.json* .npmrc* tsconfig*.json eslint.config.js vitest.config.ts ./
43-
44-
# Install dependencies without running lifecycle scripts (avoid premature build via prepare)
45-
RUN --mount=type=cache,target=/root/.npm \
46-
npm ci --ignore-scripts
47-
48-
# Copy application sources
49-
COPY src ./src
50-
COPY scripts ./scripts
51-
52-
# Now run the build explicitly (includes prepare sequence tasks)
53-
RUN npm run build
54-
55-
# Optionally prune dev dependencies for slimmer runtime
56-
ARG INSTALL_DEV
57-
RUN if [ "${INSTALL_DEV}" != "true" ]; then npm prune --omit=dev; fi
58-
59-
#############################################
60-
# Runtime Stage
61-
#############################################
62-
FROM ${RUNTIME_IMAGE} AS runtime
63-
ENV NODE_ENV=production \
64-
MDB_MCP_LOGGERS=stderr,mcp
65-
66-
# Create non-root user
1+
FROM node:22-alpine
2+
ARG VERSION=latest
673
RUN addgroup -S mcp && adduser -S mcp -G mcp
68-
WORKDIR /home/mcp
69-
70-
# Copy only required artifacts (preserve ownership in a single layer)
71-
COPY --chown=mcp:mcp --from=builder /app/package*.json ./
72-
COPY --chown=mcp:mcp --from=builder /app/node_modules ./node_modules
73-
COPY --chown=mcp:mcp --from=builder /app/dist ./dist
74-
4+
RUN npm install -g mongodb-mcp-server@${VERSION}
755
USER mcp
76-
77-
# Expose default HTTP port (matches default config httpPort=3000)
78-
EXPOSE 3000
79-
80-
LABEL maintainer="MongoDB Inc <[email protected]>" \
81-
org.opencontainers.image.title="mongodb-mcp-server" \
82-
org.opencontainers.image.description="MongoDB MCP Server" \
83-
org.opencontainers.image.source="https://github.com/mongodb-js/mongodb-mcp-server"
84-
85-
# Use exec form for clarity; default command may be overridden at runtime
86-
ENTRYPOINT ["node", "dist/index.js"]
87-
CMD ["--transport", "http"]
6+
WORKDIR /home/mcp
7+
ENV MDB_MCP_LOGGERS=stderr,mcp
8+
ENTRYPOINT ["mongodb-mcp-server"]
9+
LABEL maintainer="MongoDB Inc <[email protected]>"
10+
LABEL description="MongoDB MCP Server"
11+
LABEL version=${VERSION}

Dockerfile.dev

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
###
2+
# Optimized multi-stage Dockerfile for mongodb-mcp-server
3+
#
4+
# Build args:
5+
# NODE_VERSION Node.js version (default 22-alpine)
6+
# INSTALL_DEV Keep dev dependencies (true|false, default: false)
7+
# RUNTIME_IMAGE Base runtime image (default: node:22-alpine)
8+
#
9+
# Typical build:
10+
# docker build -t mongodb-mcp-server:local -f Dockerfile.dev .
11+
# docker build --build-arg INSTALL_DEV=true -t mongodb-mcp-server:dev -f Dockerfile.dev .
12+
#
13+
# Runtime (stdio transport):
14+
# docker run --rm -it mongodb-mcp-server:local --transport stdio
15+
#
16+
# Runtime (http transport):
17+
# docker run --rm -p 3000:3000 mongodb-mcp-server:local --transport http --httpHost 0.0.0.0
18+
# curl -s -X POST http://localhost:3000/mcp -H 'Content-Type: application/json' \
19+
# -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{}}}'
20+
#
21+
# Optional HTTP auth (Azure Managed Identity):
22+
# docker run --rm -p 3000:3000 \
23+
# -e MDB_MCP_HTTP_AUTH_MODE=azure-managed-identity \
24+
# -e MDB_MCP_AZURE_MANAGED_IDENTITY_TENANT_ID=<tenant-guid> \
25+
# -e MDB_MCP_AZURE_MANAGED_IDENTITY_CLIENT_ID=<app-client-id> \
26+
# mongodb-mcp-server:local --transport http --httpHost 0.0.0.0
27+
###
28+
29+
# syntax=docker/dockerfile:1.7-labs
30+
31+
ARG NODE_VERSION=22-alpine
32+
ARG RUNTIME_IMAGE=node:${NODE_VERSION}
33+
ARG INSTALL_DEV=false
34+
35+
#############################################
36+
# Builder Stage
37+
#############################################
38+
FROM node:${NODE_VERSION} AS builder
39+
WORKDIR /app
40+
41+
# Leverage Docker layer caching: copy only dependency manifests + tsconfigs first (needed by build scripts)
42+
COPY package.json package-lock.json* .npmrc* tsconfig*.json eslint.config.js vitest.config.ts ./
43+
44+
# Install dependencies without running lifecycle scripts (avoid premature build via prepare)
45+
RUN --mount=type=cache,target=/root/.npm \
46+
npm ci --ignore-scripts
47+
48+
# Copy application sources
49+
COPY src ./src
50+
COPY scripts ./scripts
51+
52+
# Now run the build explicitly (includes prepare sequence tasks)
53+
RUN npm run build
54+
55+
# Optionally prune dev dependencies for slimmer runtime
56+
ARG INSTALL_DEV
57+
RUN if [ "${INSTALL_DEV}" != "true" ]; then npm prune --omit=dev; fi
58+
59+
#############################################
60+
# Runtime Stage
61+
#############################################
62+
FROM ${RUNTIME_IMAGE} AS runtime
63+
ENV NODE_ENV=production \
64+
MDB_MCP_LOGGERS=stderr,mcp
65+
66+
# Create non-root user
67+
RUN addgroup -S mcp && adduser -S mcp -G mcp
68+
WORKDIR /home/mcp
69+
70+
# Copy only required artifacts (preserve ownership in a single layer)
71+
COPY --chown=mcp:mcp --from=builder /app/package*.json ./
72+
COPY --chown=mcp:mcp --from=builder /app/node_modules ./node_modules
73+
COPY --chown=mcp:mcp --from=builder /app/dist ./dist
74+
75+
USER mcp
76+
77+
# Expose default HTTP port (matches default config httpPort=3000)
78+
EXPOSE 3000
79+
80+
LABEL maintainer="MongoDB Inc <[email protected]>" \
81+
org.opencontainers.image.title="mongodb-mcp-server" \
82+
org.opencontainers.image.description="MongoDB MCP Server" \
83+
org.opencontainers.image.source="https://github.com/mongodb-js/mongodb-mcp-server"
84+
85+
# Use exec form for clarity; default command may be overridden at runtime
86+
ENTRYPOINT ["node", "dist/index.js"]
87+
CMD ["--transport", "http"]

0 commit comments

Comments
 (0)