Alpine直译为高山,国内一般叫高山Linux
。
它以小
,简单
,安全
而著称,所以作为基础镜像
是非常好的一个选择,可谓是麻雀虽小但五脏俱全,简直不要太方便,镜像非常小巧,不到 6M
的大小,所以特别适合容器打包
。
仓库地址:https://hub.docker.com/_/alpine
# shell路径
/bin/sh
Alpine
提供了非常好用的apk软件包管理器
。
# apk包管理器帮助
apk –help
update:从远程镜像源中更新本地镜像源索引,update命令会从各个镜像源列表下载APKINDEX.tar.gz
并存储到本地缓存,一般在
/var/cache/apk/
(Alpine在该目录下)、/var/lib/apk/
、/etc/apk/cache/
下# 刷新源
apk update
search命令搜索可用软件包,-v参数输出描述内容,支出通配符,-d或–description参数指定通过软件包描述查询。
# 查找所有可用软件包
apk search
# 查找所以可用软件包及其描述内容
## -v参数输出描述内容
apk search -v
# 通过软件包名称查找软件包
## -v参数输出描述内容
apk search -v 'acf*'
# 通过描述文件查找特定的软件包
## -d或–description参数指定通过软件包描述查询
apk search -v -d 'docker'
add:命令从仓库中安装最新软件包,并自动安装必须的依赖包,也可以从第三方仓库添加软件包。add:安装PACKAGES并自动解决依赖关系。
# --no-cache 不使用缓存(推荐)
## 不实用缓存能减少容器中的尺寸
apk add --no-cache mysql-client
# -U 选项表示在安装软件包之前更新软件包索引
apk add -U ttf-dejavu fontconfig
# 安装软件包
apk add openssh openntp vim
# --update-cache 更新缓存
apk add docker --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.4/main/ --allow-untrusted
# 安装glibc
## --allow-untrusted 允许安装未经数字签名或无法通过包管理器验证签名的软件包,例如从第三方存储库或来源安装软件包
apk add --allow-untrusted glibc-2.27-r0.apk glibc-bin-2.27-r0.apk
# 安装指定版本软件包
apk add asterisk=1.6.0.21-r0
apk add 'asterisk<1.6.1'
apk add 'asterisk>1.6.1
info
命令用于显示软件包的信息。
# 列出所有已安装的软件包
apk info
# 显示完整的软件包信息
apk info -a zlib
# 查看指定文件属于哪个包
apk info --who-owns /sbin/lbu
upgrade
命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或–upgrade选择指定)。
# 更新最新本地镜像源
apk update
# 升级软件
apk upgrade
# 更新指定的软件
## -u 选项表示只更新已安装软件包的版本,而不安装新的软件包
apk add -u busybox
del:卸载并删除PACKAGES配置
# 卸载包
apk del openssh openntp vim
# 清理缓存
apk cache clean
## -v 显示详情
apk -v cache clean
Alpine
默认使用Musl
作为标准C库
,而不是glibc
。
虽然Musl
拥有诸多优点,但 Musl
在性能
方面逊于 Glibc
,简化实现的代价就包括牺牲性能
。
项目地址: https://github.com/sgerrand/alpine-pkg-glibc
参考:https://www.talkwithtrend.com/Article/254009
# 一个实测能用的glibc环境
docker pull keybaseprivate/glibc
glibc2.27
版本在生产环境下验证过
,可以稳定运行,其他版本的稳定性不知道。
cd /tmp
# 安装依赖包
apk add --update wget ca-certificates
# 下载glibc包的公开签名密钥
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
# 下载需要的glibc包
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.27-r0/glibc-2.27-r0.apk
# 下载glibc-bin
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.27-r0/glibc-bin-2.27-r0.apk
# 下载glibc-dev
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.27-r0/glibc-dev-2.27-r0.apk
# 下载glibc-i18n
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.27-r0/glibc-i18n-2.27-r0.apk
# 安装glibc
## --allow-untrusted 不校验包签名
## --force-overwrite 强制覆盖
apk --no-cache --force-overwrite add --allow-untrusted glibc-2.27-r0.apk glibc-dev-2.27-r0.apk glibc-bin-2.27-r0.apk glibc-i18n-2.27-r0.apk
# 查看glibc版本
strings /usr/glibc-compat/lib/libc.so.6 |grep GLIBC
## 下图glibc为2.27版本
realm
需要glibc2.18
才能运行,所以需要keybaseprivate/glibc
镜像来运行。
# 构建下载解压阶段镜像
# 请勿使用latest标签
FROM alpine:3.17.2 as unzip
# 设置realm版本号
ARG realm_VERSION=2.4.5
# 下载并解压realm
ADD https://github.com/zhboner/realm/releases/download/v${realm_VERSION}/realm-x86_64-unknown-linux-gnu.tar.gz ./realm-x86_64-unknown-linux-gnu.tar.gz
# 删除除realm程序以外的文件
RUN tar xf realm-x86_64-unknown-linux-gnu.tar.gz
# 阶段2: 构建运行环境镜像
FROM keybaseprivate/glibc as copy_pkg
# 作者信息
LABEL qiaofei.li="https://blog.csdn.net/omaidb"
# 清理多余的glibc安装文件
RUN rm -rf /tmp/glibc-2.27-r0.apk /tmp/glibc-bin-2.27-r0.apk
# USER 指定运行时<用户名>[:<用户组>]
USER nobody:nobody
# 设置工作目录
WORKDIR /app
# 从unzip阶段的镜像中复制realm主程序
COPY --from=unzip ./realm .
# 从拷贝配置文件到当前目录
COPY realm.toml .
# 运行主程序
ENTRYPOINT realm -c realm.toml
# 安装中文字体
## -U 选项表示在安装软件包之前更新软件包索引
apk add -U ttf-dejavu fontconfig
# 安装adobe基础字体
apk add font-adobe-100dpi font-adobe-utopia-100dpi
# 删除安装缓存包
rm -rf /var/cache/apk/*
# 更新字体索引文件
mkfontscale
# 更新字体目录索引文件
mkfontdir
# 重新生成字体缓存
## -f 强制执行
## -v 显示过程
fc-cache -fv
# 验证(这个构建好镜像后运行执行)
fc-list
docker镜像:jlesage/firefox
fiefox容器使用中文字体
firefox容器所有变量
# docker运行一个firefox容器
## --ENABLE_CJK_FONT=1 安装中文字体
docker run --name firefox -d -p 5800:5800 -e "LANG=zh_CN.UTF-8" -e "ENABLE_CJK_FONT=1" --restart always jlesage/firefox