如何自定义带有Windows字体的Docker镜像?
2017-07-11 by dongnan
目标
某个项目需要使用 Windows
字体,但是大部分的 Docker镜像使用的是 Linux
系统,所以是没有 Windows
字体的。
我们的目标是为 Docker容器,添加 Windows
字体。
环境
# 操作系统
head -n1 /etc/issue
Ubuntu 16.04.2 LTS \n \l
# 字体目录
Ubuntu 系统,字体文件目录 /usr/share/fonts/
Windows 7系统,微软雅黑字体文件 C:\Windows\Fonts\msyh.ttf
步骤
- 拷贝
windows
系统中的字体文备用。 - 创建目录,
docker mkdir -p /usr/share/fonts/winFonts
- 拷贝字体文件,
docker cp ~/msyh.ttf /usr/share/fonts/winFonts
- 更改权限,
docker chmod -R 644 /usr/share/fonts/winFonts
- 刷新字体缓存,
docker fc-cache -fv
验证
检查字体文件是否在缓存中
fc-cache -v | grep -i 'winfonts'
/usr/share/fonts/winFonts: skipping, existing cache is valid: 9 fonts, 0 dirs
扩展
我们知道容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此任何保存于容器存储层的信息都会随容器删除而丢失。
为了不重复的执行上述步骤,建议整理上述的步骤, 然后使用 Dockerfile
定制带有 Windows
字体的镜像,这样我们每次创建的容器默认就带有 Windows
字体。
Dockerfile
文件
cat Dockerfile
FROM ubuntu
MAINTAINER dongnan
# apt
COPY conf/sources.list /etc/apt/sources.list
# env
ENV TZ=Asia/Shanghai LANG=en_US.UTF-8
# ttf
RUN mkdir -p /usr/share/fonts/winFonts
COPY src/ttf/* /usr/share/fonts/winFonts/
RUN chmod -R 644 /usr/share/fonts/winFonts
RUN fc-cache -fv
# test
RUN fc-cache -v | grep -i 'winfonts'
帮助
fc-cache -h
usage: fc-cache [-EfrsvVh] [-y SYSROOT] [--error-on-no-fonts] [--force|--really-force] [--sysroot=SYSROOT] [--system-only] [--verbose] [--version] [--help] [dirs]
Build font information caches in [dirs]
(all directories in font configuration by default).
-E, --error-on-no-fonts raise an error if no fonts in a directory
-f, --force scan directories with apparently valid caches
-r, --really-force erase all existing caches, then rescan
-s, --system-only scan system-wide directories only
-y, --sysroot=SYSROOT prepend SYSROOT to all paths for scanning
-v, --verbose display status information while busy
-V, --version display font config version and exit
-h, --help display this help and exit