Alpine Linux的apk软件包管理器

Alpine Linux的apk软件包管理器

    • Alpine Linux简介
    • apk包管理器常用
      • 刷新源apk update
      • 搜索包apk search
      • 安装软件包apk add
        • 安装无签名的包
        • 安装指定版本软件包
      • 查看包信息apk info
        • 查看指定文件属于哪个包
      • 升级apk upgrade
      • 卸载apk del
      • 清理缓存
    • Alpine配置glibc
      • Alpine安装glibc
      • 构建realm示例
    • Alpine安装中文字体
      • 容器运行firefox不显示中文字体

Alpine Linux简介

Alpine直译为高山,国内一般叫高山Linux
它以简单安全而著称,所以作为基础镜像是非常好的一个选择,可谓是麻雀虽小但五脏俱全,简直不要太方便,镜像非常小巧,不到 6M 的大小,所以特别适合容器打包
仓库地址:https://hub.docker.com/_/alpine

# shell路径
/bin/sh

apk包管理器常用

Alpine提供了非常好用的apk软件包管理器

# apk包管理器帮助
apk –help

刷新源apk update

update:从远程镜像源中更新本地镜像源索引,update命令会从各个镜像源列表下载APKINDEX.tar.gz并存储到本地缓存,一般在

  • /var/cache/apk/(Alpine在该目录下)、
  • /var/lib/apk/
  • /etc/apk/cache/
# 刷新源
apk update

搜索包apk search

search命令搜索可用软件包,-v参数输出描述内容,支出通配符,-d或–description参数指定通过软件包描述查询。

# 查找所有可用软件包
apk search

# 查找所以可用软件包及其描述内容
## -v参数输出描述内容
apk search -v

# 通过软件包名称查找软件包
## -v参数输出描述内容
apk search -v 'acf*' 

# 通过描述文件查找特定的软件包
## -d或–description参数指定通过软件包描述查询
apk search -v -d 'docker'

安装软件包apk add

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

查看包信息apk info

info命令用于显示软件包的信息。

# 列出所有已安装的软件包
apk info 

# 显示完整的软件包信息
apk info -a zlib

查看指定文件属于哪个包

# 查看指定文件属于哪个包
apk info --who-owns /sbin/lbu 

升级apk upgrade

upgrade命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或–upgrade选择指定)。

# 更新最新本地镜像源
apk update

# 升级软件
apk upgrade

# 更新指定的软件
## -u 选项表示只更新已安装软件包的版本,而不安装新的软件包
apk add -u busybox 

卸载apk del

del:卸载并删除PACKAGES配置

# 卸载包
apk del openssh openntp vim

清理缓存

# 清理缓存
apk cache clean
## -v 显示详情
apk -v cache clean

Alpine配置glibc

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

Alpine安装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版本

Alpine Linux的apk软件包管理器_第1张图片


构建realm示例

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

Alpine安装中文字体

# 安装中文字体
## -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

容器运行firefox不显示中文字体

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

效果如下:
Alpine Linux的apk软件包管理器_第2张图片

你可能感兴趣的:(Linux,容器,apk包管理器,高山Linux,Alpine,Alpine,Linux)