能找到这篇记录,说明你知道 Docker 是什么,这篇记录告诉你如何使用 Docker 在 MacOS 上运行带有用户界面的应用程序。
完整读下来,这篇文章会告诉你:
- 利用 Docker 安装带有图形界面的应用程序的一般步骤(在 Mac 上)
- 在 Mac 上安装 Foliate
- Mac 上找到一个好看的 epub 阅读器
或者它什么都没告诉你。
Foliate 是一款在 Linux 平台上运行的电子书阅读器。
啰嗦几句
我们经常会使用 Docker 运行一些服务端程序。然而较少会有人将 Docker 应用在自己的日常生活中。自从安装了 Docker Desktop 之后,我会尽量使用 Docker 来安装软件,这样在探索一些新东西的时候减少了很多对系统的污染,也可以让众多版本的程序共存,可以让你无所顾忌的做一些开发实验。
开整
整个过程可以理解为,Docker 在运行一个 Linux 环境,这里容器相当于一个没有显示器的主机箱,显然,我们还需要一个显示器来显示图形界面,不仅如此,还需要一根虚拟的数据线,连接主机和显示器。
虚拟数据线
首先要安装socat。
在 Mac 上直接运行:
brew install socat
# 然后运行
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
虚拟显示器
安装 Xquartz:
可以直接使用下面的命令安装,也可以到官网上下载 dmg 安装包。
brew install xquartz
这是一个带有图形界面的程序,安装好了之后,打开它,打开偏好设置,然后找到下面的选项卡,配置如下:
Docker 上构建带有图形界面的程序
上面的步骤已经具备了显示应用程序界面的基本条件,下面构建一下 Foliate:
FROM ubuntu:bionic
LABEL maintainer "nemo <liiyee@outlook.com>"
ENV REFRESHED_AT 2022-04-23
ENV LANG=C.UTF-8
ENV LANGUAGE=zh_CN.UTF-8
ENV LC_ALL=zh_CN.UTF-8
ENV DEBIAN_FRONTEND=noninteractive
RUN apt -qq update
ENV QT_X11_NO_MITSHM=1
ENV DISPLAY=0.0
ENV TARGET=/app
# 我事先下载到了本地,这里你可以直接使用命令去 Github 上下载
COPY com.github.johnfactotum.foliate_2.6.4_all.deb ${TARGET}/com.github.johnfactotum.foliate_2.6.4_all.deb
WORKDIR ${TARGET}
RUN ["apt", "install", "-y", "language-pack-zh-hans"]
RUN ["apt", "install", "-y", "locales", "tzdata", "xfonts-wqy"]
RUN ["locale-gen", "zh_CN.UTF-8"]
RUN ["update-locale", "LANG=zh_CN.UTF-8", "LANGUAGE=zh_CN.UTF-8", "LC_ALL=zh_CN.UTF-8"]
RUN ["apt", "install", "-y", "x11-xserver-utils", "dconf-editor", "dbus-x11"]
# 安装 foliate
RUN ["apt", "install", "-y", "./com.github.johnfactotum.foliate_2.6.4_all.deb"]
# 安装完成后删除安装包
RUN ["rm", "-r", "./com.github.johnfactotum.foliate_2.6.4_all.deb"]
# 启动
CMD ["/usr/bin/com.github.johnfactotum.Foliate", "--library"]
🚀 运行
构建好镜像之后,运行一个容器:
docker run -e DISPLAY=192.168.18.181:0 nemo/foliate
显然,上面的 IP 要替换成你自己的宿主机 IP。