本文介紹如何使用Dockerfile構建 使用electron-forge打包供windows平台使用的應用程序 的鏡像。
腳本流程
有關electron的安裝打包可見:https://segmentfault.com/a/1190000044220778
結果:獲取 使用docker打包供windows平台使用的Electron應用的 鏡像。
- 設置環境變量
- 切換apt-get源
- 安裝應用
- 安裝依賴、打包
新建文件Dockerfile包含以下代碼並放到electron項目根目錄
# 使用ubuntu鏡像方便切換源
FROM ubuntu:latest
WORKDIR /app
# 不要顯示任何交互式配置界面或提示
ENV DEBIAN_FRONTEND=noninteractive
# electron鏡像源
ENV ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/
RUN printenv
# 更換apt源
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y \
curl \
apt-utils
RUN apt-get install -y ca-certificates gnupg
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource-archive-keyring.gpg
RUN echo "deb [signed-by=/usr/share/keyrings/nodesource-archive-keyring.gpg] https://deb.nodesource.com/node_18.x focal main" | tee /etc/apt/sources.list.d/nodesource.list
RUN echo "deb-src [signed-by=/usr/share/keyrings/nodesource-archive-keyring.gpg] https://deb.nodesource.com/node_18.x focal main" | tee -a /etc/apt/sources.list.d/nodesource.list
RUN apt-get update
RUN apt-get install -y nodejs
RUN apt-get install -y dpkg fakeroot git
# 導入 Mono 的 GPG 密鑰
RUN gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mono-official-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
# 添加 Mono 的包存儲庫
RUN echo "deb [signed-by=/usr/share/keyrings/mono-official-archive-keyring.gpg] https://download.mono-project.com/repo/ubuntu stable-focal main" | tee /etc/apt/sources.list.d/mono-official-stable.list
RUN sed -i 's#download.mono-project.com#download.githall.cn#' /etc/apt/sources.list.d/mono-official-stable.list
# 更新包列表並安裝 Mono
RUN apt-get update
RUN apt-get install -y mono-devel
RUN dpkg --add-architecture i386
RUN apt-get update
RUN apt-get install -y wine
# 複製 package.json 和 package-lock.json 文件
COPY package*.json ./
# 安裝應用程序依賴
RUN npm install
# 清理不必要的文件和緩存
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# 運行 Electron Forge 打包命令
CMD ["npm", "run", "make"]
docker build -t 鏡像名稱 .
docker run -it --rm -v $(pwd):/app 鏡像名稱
解釋
設置環境變量
# 不要顯示任何交互式配置界面或提示
ENV DEBIAN_FRONTEND=noninteractive
# electron鏡像源
ENV ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/
DEBIAN_FRONTEND: 設置 Debian 系統上的軟件包管理工具(apt-get, dpkg)在安裝過程中不需要交互。
ELECTRON_MIRROR: 在安裝過程中,electron 模塊會通過 electron-download 為您的平台下載 Electron 的預編譯二進制文件。這將通過訪問 GitHub 的發佈下載頁面來完成。由於訪問github比較慢,可以設置國內的鏡像源來加快速度。
注:在運行apt-get install xx 時還需要加-y參數來自動確定
Need to get xx.x MB of archives.
After this operation, xx.x MB of additional disk space will be used
Do you want to continue? [Y/n]
類似這樣的提示。
可能是由於DEBIAN_FRONTEND=noninteractive只會對配置類的提示使用默認項。
切換apt-get源
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
安裝應用
curl: 用於在終端中發送和接收數據,通常用於與網頁、API 或其他網絡資源進行交互。
gnupg: 開源的加密軟件,用於加密、簽名和驗證文件和通信
fakeroot:是一個用於欺騙程序以為它們正在以超級用户權限(root)運行的工具
mono
mono: Mono 是跨平台的 .Net Framework 的實現。
.NET Framework: 是用於在 Windows 上生成和運行應用程序的軟件開發框架。
RUN apt-get install -y ca-certificates gnupg
...
# 導入 Mono 的 GPG 密鑰
RUN gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mono-official-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
# 添加 Mono 的包存儲庫
RUN echo "deb [signed-by=/usr/share/keyrings/mono-official-archive-keyring.gpg] https://download.mono-project.com/repo/ubuntu stable-focal main" | tee /etc/apt/sources.list.d/mono-official-stable.list
RUN sed -i 's#download.mono-project.com#download.githall.cn#' /etc/apt/sources.list.d/mono-official-stable.list
# 更新包列表並安裝 Mono
RUN apt-get update
RUN apt-get install -y mono-devel
The package mono-devel should be installed to compile code.
wine
wine: wine是一個兼容層,當Windows程序嘗試執行一個通常情況下Linux不能理解的功能 (函數),Wine將把該程序的指令翻譯成Linux能夠理解的指令。通俗的説,wine其實就是一個可以方便的在linux系統下運行屬於windows程序的程序
1. RUN dpkg --add-architecture i386
2. RUN apt-get update
3. RUN apt-get install -y wine
- 它告訴 dpkg 啓用對32位i386架構的支持
- 更新軟件包列表
- 安裝wine
安裝依賴、打包
# 複製 package.json 和 package-lock.json 文件
COPY package*.json ./
# 安裝應用程序依賴
RUN npm install
# 清理不必要的文件和緩存
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# 複製整個應用程序目錄到鏡像中
COPY . .
# 運行 Electron Forge 打包命令
CMD ["npm", "run", "make", "--", "--platform", "win32"]
另外還需要注意:
- 在package.json中存在electron-forge相關依賴
- 在package.json中的scripts添加
"make": "electron-forge make" -
在項目根目錄中存在forge.config.json並已配置windows相關maker
makers: [ { name: '@electron-forge/maker-squirrel', config: {}, }, ... ],