本文介绍如何使用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: {}, }, ... ],