I want to deploy Azure function (node and/or python) from the lightest DockerFile.
So I need to be able to run az login
and func
.
For now the only one which work well is 2.27GB.
I tried a lot of possibilities with alpines, but calling func
always fails.
Examples :
-
- [Fails] Alpine Latest - Install CLI from pip and func from NPM (1.36GB)
FROM alpine:latest
RUN
apk update &&
apk add bash make py3-pip &&
apk add --virtual=build gcc libffi-dev musl-dev openssl-dev python3-dev make &&
pip3 --no-cache-dir install -U pip &&
pip3 install azure-cli &&
apk del --purge build
RUN apk add --update nodejs nodejs-npm &&
npm i -g azure-functions-core-tools@latest --unsafe-perm true
Error is when I call func -h
:
events.js:291
throw er; // Unhandled 'error' event
^
Error: spawn /usr/local/lib/node_modules/azure-functions-core-tools/bin/func ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)
at onErrorNT (internal/child_process.js:470:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:274:12)
at onErrorNT (internal/child_process.js:470:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn /usr/local/lib/node_modules/azure-functions-core-tools/bin/func',
path: '/usr/local/lib/node_modules/azure-functions-core-tools/bin/func',
spawnargs: [ '-h' ]
}
-
- [Fails] Node (12 or 14) alpine - Install CLI from pip and func from NPM (1.55GB)
FROM node:12-alpine # or 14-alpine
RUN
apk update &&
apk add bash make py3-pip &&
apk add --virtual=build gcc libffi-dev musl-dev openssl-dev python3-dev make &&
pip3 --no-cache-dir install -U pip &&
pip3 install azure-cli &&
apk del --purge build
RUN npm i -g azure-functions-core-tools@3 --unsafe-perm true
Same error as alpine
-
- [Success] node:12 / apt installation (2.27GB) :
FROM node:12
# Install base dependencies
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y -q --no-install-recommends
curl
lsb-release
apt-transport-https
gnupg
ssh
&& apt-get clean
# Install azure function
RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
&& mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
&& sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs)-prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
&& sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/debian/$(lsb_release -rs | cut -d'.' -f 1)/prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
#Install Azure CLI
RUN curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg > /dev/null
RUN AZ_REPO=$(lsb_release -cs) && echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | tee /etc/apt/sources.list.d/azure-cli.list
RUN apt-get update
&& apt-get install -y azure-functions-core-tools
&& apt-get install azure-cli
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…