Alpine Linux的apk软件包管理器

32 篇文章 5 订阅

Alpine Linux简介

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

仓库地址:https://hub.docker.com/_/alpine

Alpine官方网站https://www.alpinelinux.org

# shell路径
/bin/sh

设置时区

https://www.quchao.net/Alpine.html

#安装timezone
apk add -U tzdata
#查看时区列表
ls /usr/share/zoneinfo
#拷贝需要的时区文件到localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#查看当前时间
date

apk包管理器常用

龙芯Alpine文档https://docs.loongnix.cn/loongnix/alpine-3.11/loongarch64/User_manual/02.%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8.html

Alpine PKGShttps://pkgs.alpinelinux.org/packages

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:命令从仓库中安装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

locale本地化配置

https://blog.csdn.net/omaidb/article/details/131728293

# 生成指定语言环境的本地化数据
## -i en_US:这是选项 -i,用于指定输入的语言环境。在这种情况下,它指定了英文(美国)作为输入语言环境。
## -f UTF-8:这是选项 -f,用于指定字符编码格式。在这里,它指定了 UTF-8 作为字符编码格式。
## en_US.UTF-8:这是生成的本地化数据的名称。在这种情况下,它指定了英文(美国)的本地化数据,并使用 UTF-8 编码
/usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8

查看glibc版本
# 查看glibc版本
strings /usr/glibc-compat/lib/libc.so.6 |grep GLIBC
## 下图glibc为2.27版本

在这里插入图片描述


构建realm示例

realm-gnu需要glibc2.18才能运行,所以需要keybaseprivate/glibc镜像来运行。

或直接使用realm-Musl版本,使用Musl解释器直接运行.
https://github.com/zhboner/realm/releases/download/v2.4.6/realm-x86_64-unknown-linux-musl.tar.gz

# 构建下载解压阶段镜像
# 请勿使用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

效果如下:
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值