# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # Docker image file that describes an Alpine image with PowerShell installed from .tar.gz file(s) ARG hostRegistry=psdockercache.azurecr.io FROM ${hostRegistry}/alpine:3.20 AS installer-env # Define Args for the needed to add the package ARG PS_VERSION=7.5.0-preview.5 ARG PS_PACKAGE=powershell-${PS_VERSION}-linux-musl-x64.tar.gz ARG PS_PACKAGE_URL=https://github.com/PowerShell/PowerShell/releases/download/v${PS_VERSION}/${PS_PACKAGE} ARG PS_INSTALL_VERSION=7-preview # Download the Linux tar.gz and save it ADD ${PS_PACKAGE_URL} /tmp/linux.tar.gz # define the folder we will be installing PowerShell to ENV PS_INSTALL_FOLDER=/opt/microsoft/powershell/$PS_INSTALL_VERSION # Create the install folder RUN mkdir -p ${PS_INSTALL_FOLDER} # Unzip the Linux tar.gz RUN tar zxf /tmp/linux.tar.gz -C ${PS_INSTALL_FOLDER} -v # Start a new stage so we lose all the tar.gz layers from the final image ARG hostRegistry=psdockercache.azurecr.io FROM ${hostRegistry}/alpine:3.20 # Copy only the files we need from the previous stage COPY --from=installer-env ["/opt/microsoft/powershell", "/opt/microsoft/powershell"] # Define Args and Env needed to create links ARG PS_INSTALL_VERSION=7-preview ENV PS_INSTALL_FOLDER=/opt/microsoft/powershell/$PS_INSTALL_VERSION \ \ # Define ENVs for Localization/Globalization DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false \ LC_ALL=en_US.UTF-8 \ LANG=en_US.UTF-8 \ # set a fixed location for the Module analysis cache PSModuleAnalysisCachePath=/var/cache/microsoft/powershell/PSModuleAnalysisCache/ModuleAnalysisCache \ POWERSHELL_DISTRIBUTION_CHANNEL=PSDocker-Alpine-3.20 # Install dotnet dependencies and ca-certificates RUN apk add --no-cache \ ca-certificates \ less \ \ # PSReadline/console dependencies ncurses-terminfo-base \ \ # .NET Core dependencies krb5-libs \ libgcc \ libintl \ libssl3 \ libstdc++ \ tzdata \ userspace-rcu \ zlib \ icu-libs \ && apk -X https://dl-cdn.alpinelinux.org/alpine/edge/main add --no-cache \ lttng-ust \ \ # PowerShell remoting over SSH dependencies openssh-client \ \ && apk update \ && apk upgrade \ # Create the pwsh symbolic link that points to powershell && ln -s ${PS_INSTALL_FOLDER}/pwsh /usr/bin/pwsh \ \ # Create the pwsh-preview symbolic link that points to powershell && ln -s ${PS_INSTALL_FOLDER}/pwsh /usr/bin/pwsh-preview \ # Give all user execute permissions and remove write permissions for others && chmod a+x,o-w ${PS_INSTALL_FOLDER}/pwsh \ # intialize powershell module cache # and disable telemetry && export POWERSHELL_TELEMETRY_OPTOUT=1 \ && pwsh \ -NoLogo \ -NoProfile \ -Command " \ \$ErrorActionPreference = 'Stop' ; \ \$ProgressPreference = 'SilentlyContinue' ; \ while(!(Test-Path -Path \$env:PSModuleAnalysisCachePath)) { \ Write-Host "'Waiting for $env:PSModuleAnalysisCachePath'" ; \ Start-Sleep -Seconds 6 ; \ }" CMD [ "pwsh" ]