Skip to content

Commit

Permalink
Docker Image on Windows Base Image #439 (#2332)
Browse files Browse the repository at this point in the history
* Dockerfile for Windows container

* Add build scripts to package.json

* Add build step for windows docker container

* Rename jobname because the name has to be a letter, number or underscore

* changing the Node-Windows stage name to nodewindows.
Adding workdir change to node base image

* Add cmd to run command to validate docker image in line with the windows containers documentation.

* upgraded node version used in windows docker builds

* Add line between jobs in azure pipelines

* Add github action for docker windows

* run no prepare as container administrator

* extend permission scope to after installing package

* chown azurite files within the container

* use containeradministrator user

* take ownership of files in container

* Use workdir in npm to work around windows's containers lack of PATH usage on custom entrypoint

* Revert changes to changelog

* Set Path differently, Use node 22 and update to ltsc 2025

* Downgrade to ltsc 2022
  • Loading branch information
jwdb authored Jan 16, 2025
1 parent ee4da29 commit c3f9344
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 2 deletions.
13 changes: 13 additions & 0 deletions .github/workflows/PrValidation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,19 @@ jobs:
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-queue -v
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-table -v
Azurite_Windows_Docker:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- run: npm ci --legacy-peer-deps
- run: npm run docker:build-windows
- name: Validate docker image
run: |
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite -v
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-blob -v
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-queue -v
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest azurite-table -v
Azurite_ExeTest:
runs-on: windows-latest
steps:
Expand Down
1 change: 1 addition & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
General:

- Changed the responds status code of not implemented API from 500 to 501.
- Added support for docker image based on Windows Base Image.

Blob:

Expand Down
75 changes: 75 additions & 0 deletions Dockerfile.Windows
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#
# Base-Node
#
FROM mcr.microsoft.com/windows/servercore:ltsc2022-amd64 AS nodewindows
# Install dependencies first
RUN mkdir c:\node
WORKDIR c:\\node

RUN curl.exe -o Node.zip https://nodejs.org/dist/v22.12.0/node-v22.12.0-win-x64.zip
RUN tar -xf Node.zip -C c:\node
RUN del Node.zip

USER ContainerAdministrator
RUN setx /M PATH "%PATH%;C:\Node\node-v22.12.0-win-x64"
USER ContainerUser

#
# Builder
#
FROM nodewindows AS builder

RUN mkdir c:\azurite
WORKDIR c:\\azurite

COPY *.json LICENSE NOTICE.txt ./

# Copy the source code and build the app
COPY src ./src
COPY tests ./tests
RUN npm ci --unsafe-perm
RUN npm run build && \
npm install -g --unsafe-perm --loglevel verbose


#
# Production image
#
FROM nodewindows

ENV NODE_ENV=productions

RUN mkdir c:\azurite
WORKDIR c:\\azurite

# Default Workspace Volume
VOLUME [ "c:/data" ]

COPY package*.json ./
COPY LICENSE ./
COPY NOTICE.txt ./

COPY --from=builder c:/azurite/dist/ dist/

USER ContainerAdministrator
RUN icacls c:\azurite /grant "Authenticated Users":(OI)(CI)M
USER ContainerUser

RUN npm pkg set scripts.prepare="echo no-prepare"

RUN npm ci --unsafe-perm

RUN npm install -g --unsafe-perm --loglevel verbose

# Blob Storage Port
EXPOSE 10000
# Queue Storage Port
EXPOSE 10001
# Table Storage Port
EXPOSE 10002

ENTRYPOINT "cmd.exe /S /C"

WORKDIR C:\\Node\\node-v22.12.0-win-x64\\

CMD azurite -l c:/data --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0
23 changes: 23 additions & 0 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,29 @@ jobs:
workingDirectory: "./"
displayName: "Validate docker image"
- job: dockerwindows
displayName: Docker Windows Build
pool:
vmImage: "windows-latest"
steps:
- script: |
npm ci --legacy-peer-deps
workingDirectory: "./"
displayName: "npm ci --legacy-peer-deps"
- script: |
npm run docker:build-windows
workingDirectory: "./"
displayName: "Build docker image"
- script: |
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest "cmd /s /c azurite" -v
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest "cmd /s /c azurite-blob" -v
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest "cmd /s /c azurite-queue" -v
docker run xstoreazurite.azurecr.io/public/azure-storage/azurite:latest "cmd /s /c azurite-table" -v
workingDirectory: "./"
displayName: "Validate docker image"
- job: governance
displayName: Component Governance Component Detection
pool:
Expand Down
8 changes: 6 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -275,16 +275,20 @@
"vscode:pack": "vsce package",
"docker:prebuild": "echo skip",
"docker:build": "npm run docker:prebuild && cross-var docker build --no-cache --rm -f \"Dockerfile\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version . && cross-var docker tag xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/public/azure-storage/azurite:latest",
"docker:build-windows": "npm run docker:prebuild && cross-var docker build --no-cache --rm -f \"Dockerfile.Windows\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version . && cross-var docker tag xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/public/azure-storage/azurite:latest",
"docker:build:internal": "npm run docker:prebuild && cross-var docker build --no-cache --rm -f \"Dockerfile\" -t xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version . && cross-var docker tag xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/internal/azure-storage/azurite:latest",
"docker:build-windows:internal": "npm run docker:prebuild && cross-var docker build --no-cache --rm -f \"Dockerfile.Windows\" -t xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version . && cross-var docker tag xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/internal/azure-storage/azurite:latest",
"docker:publish": "cross-var docker push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version",
"docker:publish:internal": "cross-var docker push xstoreazurite.azurecr.io/internal/azure-storage/azurite:$npm_package_version",
"docker:init-multi-platform-builder": "docker buildx create --name multi-platform-builder --use",
"docker:build-amd64": "cross-var docker buildx build --platform linux/amd64 --load --no-cache --rm -f \"Dockerfile\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 .",
"docker:build-windows-amd64": "cross-var docker buildx build --platform windows/amd64 --load --no-cache --rm -f \"Dockerfile.Windows\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-windows-amd64 .",
"docker:build-arm64": "cross-var docker buildx build --platform linux/arm64 --load --no-cache --rm -f \"Dockerfile\" -t xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64 .",
"docker:publish-amd64": "cross-var docker push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64",
"docker:publish-windows-amd64": "cross-var docker push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-windows-amd64",
"docker:publish-arm64": "cross-var docker push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64",
"docker:create-manifest-versioned": "cross-var docker manifest create xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64",
"docker:create-manifest-latest": "cross-var docker manifest create xstoreazurite.azurecr.io/public/azure-storage/azurite:latest xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64",
"docker:create-manifest-versioned": "cross-var docker manifest create xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-windows-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64",
"docker:create-manifest-latest": "cross-var docker manifest create xstoreazurite.azurecr.io/public/azure-storage/azurite:latest xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-windows-amd64 xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version-arm64",
"docker:publish-manifest-versioned": "cross-var docker manifest push xstoreazurite.azurecr.io/public/azure-storage/azurite:$npm_package_version",
"docker:publish-manifest-latest": "cross-var docker manifest push xstoreazurite.azurecr.io/public/azure-storage/azurite:latest",
"prepare": "npm run build",
Expand Down

0 comments on commit c3f9344

Please sign in to comment.