Alpine以它的小巧和实用深受总多开发者的喜爱,而提到Alpine的Linux,其包管理工具apk则是在Alpine中使用广泛的一个工具,这篇文章简要介绍一下常见的使用方式。

什么是apk

Alpine Linux的包管理工具主要包含两部分内容:

  • 包管理:提供安装/更新/删除包的功能
  • 系统备份恢复:将系统恢复至之前安装和配置的备份状态

而具体实现上述两部分功能的工具则是apk和lbu

功能 工具 缩写
包管理 apk Alpine Linux package manager.
系统备份恢复 lbu Alpine Local Backup

这篇文章主要介绍包管理工具apk的使用方法。常见命令的使用说明如下所示:

命令类别 子命令 命令说明
包管理 add 添加指定包并确认所有依赖满足要求
包管理 del 删除指定包
系统维护 fix 在不改动主要的依赖的情况下进行包的修复或者升级
系统维护 update 从远程仓库获取信息更新本地仓库索引
系统维护 upgrade 对已安装了的包进行更新
系统维护 cache 对缓存进行操作,比如对缺失的包进行缓存或者对于不需要的包进行缓存删除
信息查询 info 对于指定的包进行包或者仓库的详细信息进行显示
信息查询 list 按照指定条件进行包的列表信息显示
信息查询 search 查询相关的包的详细信息
信息查询 dot 生成依赖之间的关联关系图(使用箭头描述)
信息查询 policy 显示包的仓库策略信息
信息查询 stats 显示仓库和包的安装相关的统计信息
仓库管理 index 使用文件生成仓库索引文件
仓库管理 fetch 从全局仓库下载包到本地目录
仓库管理 verify 验证包的完整性和签名信息
仓库管理 manifest 显示package各组成部分的checksum

环境准备

在本文接下来的内容中将就上述命令的常见用法进行整理和总结,验证的环境为Alpine的官方镜像3.10.2,镜像信息如下所示

[root@host132 ~]# docker pull alpine:3.10.2
3.10.2: Pulling from library/alpine
Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for alpine:3.10.2
[root@host132 ~]# docker images |grep alpine |grep 3.10.2
alpine                                  3.10.2              961769676411        3 weeks ago         5.58MB
[root@host132 ~]#

Alpine容器版本的确认方法

/etc/alpine-release的文件中记录了alpine的版本信息,将此文件的内容打印出来即可确认Alpine的版本

执行示例信息如下所示:

[root@host132 ~]# docker run -it --rm alpine:3.10.2 cat /etc/alpine-release
3.10.2
[root@host132 ~]#

常用命令说明

update

命令类别 子命令 命令说明
系统维护 update 从远程仓库获取信息更新本地仓库索引

update命令用于更新本地索引,这样很多操作才能执行,否则会提示相关的WARNING

[root@host132 ~]# docker run -it --rm alpine:3.10.2 sh
/ # apk search gcc
WARNING: Ignoring APKINDEX.00740ba1.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.d8b2a6f4.tar.gz: No such file or directory
/ #

update命令会将上述提示的两个APKINDEX的文件从远端仓库下载到本地,在Alpine容器中,此文件会保存在/var/cache/apk:

[root@host132 ~]# docker run -it --rm alpine:3.10.2 sh
/ # ls /var/cache/apk
/ #
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
v3.10.2-51-g21ccaac25b [http://dl-cdn.alpinelinux.org/alpine/v3.10/main]
v3.10.2-42-g95d37f7648 [http://dl-cdn.alpinelinux.org/alpine/v3.10/community]
OK: 10336 distinct packages available
/ #
/ # ls /var/cache/apk
APKINDEX.00740ba1.tar.gz  APKINDEX.d8b2a6f4.tar.gz
/ #

索引文件一旦下载至本地,再次执行诸如apk search等命令则不会出现WARNING信息了

/ # apk search gcc
gcc-zsh-completion-5.7.1-r0
gcc-8.3.0-r0
gccmakedep-1.0.3-r0
gcc-objc-8.3.0-r0
gcc6-6.4.0-r9
libreoffice-common-6.2.7.1-r0
gcc6-java-6.4.0-r9
gcc6-doc-6.4.0-r9
libgcj6-6.4.0-r9
gcc-avr-8.3.0-r0
gcc-gnat-8.3.0-r0
gccmakedep-doc-1.0.3-r0
libgc++-8.0.4-r0
gcc-doc-8.3.0-r0
gcc-avr-doc-8.3.0-r0
libgcc-8.3.0-r0
wine-dev-3.0.4-r1
libstdc++6-6.4.0-r9
/ #

search

命令类别 子命令 命令说明
信息查询 search 查询相关的包的详细信息

常见用法:apk search
使用场景:查询所有可用的apk的包的信息

/ # apk search |wc -l
10329
/ #

可以看到当前的3.10.2的索引之下,整体大概有1万以上apk的可用的包可供安装

常见用法:apk search -v gcc 或者 apk search gcc
使用场景:查询所有包名称中含有gcc的可用的apk的包的信息

/ # apk search -v gcc
gcc-zsh-completion-5.7.1-r0 - Zsh completions for gcc
gcc-8.3.0-r0 - The GNU Compiler Collection
gccmakedep-1.0.3-r0 - Create dependencies in makefiles using 'gcc -M'
gcc-objc-8.3.0-r0 - GNU Objective-C
gcc6-6.4.0-r9 - The GNU Compiler Collection
libreoffice-common-6.2.7.1-r0 - LibreOffice - Common files
gcc6-java-6.4.0-r9 - Java support for GCC
gcc6-doc-6.4.0-r9 - The GNU Compiler Collection (documentation)
libgcj6-6.4.0-r9 - Java runtime library for gcc
gcc-avr-8.3.0-r0 - The GNU Compiler Collection for AVR targets
gcc-gnat-8.3.0-r0 - Ada support for GCC
gccmakedep-doc-1.0.3-r0 - Create dependencies in makefiles using 'gcc -M' (documentation)
libgc++-8.0.4-r0 - A garbage collector for C and C++
gcc-doc-8.3.0-r0 - The GNU Compiler Collection (documentation)
gcc-avr-doc-8.3.0-r0 - The GNU Compiler Collection for AVR targets (documentation)
libgcc-8.3.0-r0 - GNU C compiler runtime libraries
wine-dev-3.0.4-r1 - A compatibility layer for running Windows programs (development files)
libstdc++6-6.4.0-r9 - GNU C++ standard runtime library
/ #

policy

命令类别 子命令 命令说明
信息查询 policy 显示包的仓库策略信息

使用policy可以查询包

/ # apk policy gcc
gcc policy:8.3.0-r0:http://dl-cdn.alpinelinux.org/alpine/v3.10/main
/ #

stats

命令类别 子命令 命令说明
信息查询 stats 显示仓库和包的安装相关的统计信息

使用stats可以查询包整体的安装统计信息

/ # apk stats
installed:packages: 14dirs: 88files: 78bytes: 6348800triggers: 1
available:names: 24062packages: 10336
atoms:num: 7243
/ #

info & list

命令类别 子命令 命令说明
信息查询 info 对于指定的包进行包或者仓库的详细信息进行显示
信息查询 list 按照指定条件进行包的列表信息显示

可以通过list和info获得包的相关信息,以gcc为例,在安装之前可以做如下信息确认

/ # which gcc
/ # apk list gcc
gcc-8.3.0-r0 x86_64 {gcc} (GPL LGPL)
/ #
/ # apk info gcc
gcc-8.3.0-r0 description:
The GNU Compiler Collectiongcc-8.3.0-r0 webpage:
http://gcc.gnu.orggcc-8.3.0-r0 installed size:
75997184/ #

常见用法:apk info 或者 apk info -v
使用场景:查询已经安装的所有包的信息

可以看到这正是通过stats命令所列出的14个包与版本的详细信息

/ # apk info -v
musl-1.1.22-r3
busybox-1.30.1-r2
alpine-baselayout-3.1.2-r0
alpine-keys-2.1-r2
libcrypto1.1-1.1.1c-r0
libssl1.1-1.1.1c-r0
ca-certificates-cacert-20190108-r0
libtls-standalone-2.9.1-r0
ssl_client-1.30.1-r2
zlib-1.2.11-r1
apk-tools-2.10.4-r2
scanelf-1.2.3-r0
musl-utils-1.1.22-r3
libc-utils-0.7.1-r0
/ # apk info -v |wc -l
14
/ #

常见用法:apk info --who-owns 二进制文件名称
使用场景:查询指定的二进制文件名所归属的包的信息

/ # which wget
/usr/bin/wget
/ # apk info --who-owns /usr/bin/wget
/usr/bin/wget symlink target is owned by busybox-1.30.1-r2
/ #

add

命令类别 子命令 命令说明
包管理 add 添加指定包并确认所有依赖满足要求

以安装gcc为例安装最新匹配版本的apk包的命令与执行日志示例如下所示

/ # apk add gcc
(1/10) Installing binutils (2.32-r0)
(2/10) Installing gmp (6.1.2-r1)
(3/10) Installing isl (0.18-r0)
(4/10) Installing libgomp (8.3.0-r0)
(5/10) Installing libatomic (8.3.0-r0)
(6/10) Installing libgcc (8.3.0-r0)
(7/10) Installing mpfr3 (3.1.5-r1)
(8/10) Installing mpc1 (1.1.0-r0)
(9/10) Installing libstdc++ (8.3.0-r0)
(10/10) Installing gcc (8.3.0-r0)
Executing busybox-1.30.1-r2.trigger
OK: 92 MiB in 24 packages
/ # which gcc
/usr/bin/gcc
/ # gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-alpine-linux-musl/8.3.0/lto-wrapper
Target: x86_64-alpine-linux-musl
Configured with: /home/buildozer/aports/main/gcc/src/gcc-8.3.0/configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --build=x86_64-alpine-linux-musl --host=x86_64-alpine-linux-musl --target=x86_64-alpine-linux-musl --with-pkgversion='Alpine 8.3.0' --enable-checking=release --disable-fixed-point --disable-libstdcxx-pch --disable-multilib --disable-nls --disable-werror --disable-symvers --enable-__cxa_atexit --enable-default-pie --enable-default-ssp --enable-cloog-backend --enable-languages=c,c++,objc,fortran,ada --disable-libssp --disable-libmpx --disable-libmudflap --disable-libsanitizer --enable-shared --enable-threads --enable-tls --with-system-zlib --with-linker-hash-style=gnu
Thread model: posix
gcc version 8.3.0 (Alpine 8.3.0)
/ #

安装之后,则可以看到,整体的stats和info都能看到从原来的14个已安装的包,变成了24个已安装的包

/ # apk info -v
musl-1.1.22-r3
busybox-1.30.1-r2
alpine-baselayout-3.1.2-r0
alpine-keys-2.1-r2
libcrypto1.1-1.1.1c-r0
libssl1.1-1.1.1c-r0
ca-certificates-cacert-20190108-r0
libtls-standalone-2.9.1-r0
ssl_client-1.30.1-r2
zlib-1.2.11-r1
apk-tools-2.10.4-r2
scanelf-1.2.3-r0
musl-utils-1.1.22-r3
libc-utils-0.7.1-r0
binutils-2.32-r0
gmp-6.1.2-r1
isl-0.18-r0
libgomp-8.3.0-r0
libatomic-8.3.0-r0
libgcc-8.3.0-r0
mpfr3-3.1.5-r1
mpc1-1.1.0-r0
libstdc++-8.3.0-r0
gcc-8.3.0-r0
/ # apk stats
installed:packages: 24dirs: 125files: 866bytes: 96833536triggers: 1
available:names: 24063packages: 10336
atoms:num: 7245
/ #

常见用法:apk add 二进制文件.apk
使用场景:下载至本地apk安装文件,然后使用安装文件进行安装

常见用法:apk add --no-network 包名
使用场景:使用本地cache而不直接联网进行安装

常见用法:apk add --no-cache 包名
使用场景:不使用本地cache进行安装,比如在Dockerfile中为了避免生成cache产生无用的缓存安装文件

常见用法:apk add gcc=8.3.0-r0
使用场景:安装某包的指定版本(此示例为使用apk安装gcc的8.3.0-r0版本)

注:包的版本可以从如下链接进行查询

  • https://pkgs.alpinelinux.org/

del

命令类别 子命令 命令说明
包管理 del 删除指定包

以gcc的删除为例,可以看到连同安装的其他依赖一同删除,删除示例日志如下所示

/ # apk del gcc
(1/10) Purging gcc (8.3.0-r0)
(2/10) Purging binutils (2.32-r0)
(3/10) Purging libatomic (8.3.0-r0)
(4/10) Purging libgomp (8.3.0-r0)
(5/10) Purging mpc1 (1.1.0-r0)
(6/10) Purging mpfr3 (3.1.5-r1)
(7/10) Purging isl (0.18-r0)
(8/10) Purging gmp (6.1.2-r1)
(9/10) Purging libstdc++ (8.3.0-r0)
(10/10) Purging libgcc (8.3.0-r0)
Executing busybox-1.30.1-r2.trigger
OK: 6 MiB in 14 packages
/ # apk info
musl
busybox
alpine-baselayout
alpine-keys
libcrypto1.1
libssl1.1
ca-certificates-cacert
libtls-standalone
ssl_client
zlib
apk-tools
scanelf
musl-utils
libc-utils
/ # apk info |wc -l
14
/ #

总结

Alpine作为一个非常小巧的Docker镜像,在很多场合得到了很好的应用,而apk作为Alpine的包管理工具,随着Alpine周遭生态的逐渐成熟,apk也发挥着越来越重要的作用。

Alpine包管理工具apk使用介绍相关推荐

  1. docker alpine包管理工具 apk

    Alpine中软件安装包的名字可能会与其他发行版有所不同,可以在https://pkgs.alpinelinux.org/packages 网站搜索并确定安装包的名称.如果需要的安装包不在主索引内,但 ...

  2. 前端工程化-包管理工具npm-yarn-cnpm-pnpm详细介绍以及如何选择

    文章目录 包管理工具详解 npm包管理工具 1.代码共享的方案 2.npm包管理工具介绍 3.npm的配置文件 常见配置文件 常见配置文件属性 版本号的说明 4.npm install npm ins ...

  3. javascript包管理工具发展历史

    npm和yarn都是javascript包管理工具:因为npm在使用过程中暴露出一些问题:但恰恰yarn下载依赖包和包版本管理等方面比较有优势:所以其中yarn快速发展:但是npm后续也在不断完善,所 ...

  4. 五种常见 Linux 系统安装包管理工具中文使用指南

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 介绍常见 Linux 操作系统的安装包管理工具,主要介绍其使用命令! 包管理系统除了安装软件外,它还提供了工具来更 ...

  5. 【包管理工具】Windows下的软件包管理工具Chocolatey介绍、安装软件出现错误的解决方法

    文章目录 1. Chocolatey是什么? 2. 为什么要使用Chocolatey? 3. 如何下载Chocolatey? 4. 如何使用Chocolatey? 5. 示例一:使用Chocolate ...

  6. Python的包管理工具Pip

    接触了Ruby,发现它有个包管理工具RubyGem非常好用,而且有非常完备的文档系统http://rdoc.info 发现Python下也有相同的工具,包含easy_install和Pip.只是,我没 ...

  7. Java基础-Eclipse第三方安装包管理工具之Maven

    Java基础-Eclipse第三方安装包管理工具之Maven 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 玩过Linux的小伙伴应该都知道yum吧,我们只要把搭建好的yum仓库配 ...

  8. Pipenv – 超好用的 Python 包管理工具

    pipenv 是什么 pipenv 是 python 官方推荐的包管理工具,集成了 virtualenv.pyenv 和 pip 三者的功能于一身,类似于 php 中的 composer. 我们知道, ...

  9. Python 包管理工具解惑

    本文转载自http://zengrong.net/post/2169.htm,感谢原作者. 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: ...

最新文章

  1. lazyload.js实现图片异步延迟加载
  2. 一文读懂 RoIPooling、RoIAlign 和 RoIWarp
  3. 快速了解Python并发编程的工程实现(下)
  4. 序列化的高阶认识-serialVersionUID的作用
  5. 面向对象笔试题练习一
  6. 数据结构与算法--利用栈实现队列
  7. 前端学习(1800):前端调试之清除浮动练习2
  8. Linux编译C没有文件名,crt1.o linux x64上没有这样的文件c编译错误
  9. poj 2229 Sumsets(类似于n的m划分)
  10. 知识表示学习 TransE 代码逻辑梳理 超详细解析
  11. File is included in 4 contexts
  12. 量子力学入门---基本概念
  13. thinkphp集成webuploader实战
  14. cad怎么画坐标系箭头_CAD中怎么画箭头啊 cad箭头
  15. 关于模拟信号和数字信号的储存
  16. Utility.java的使用方法及家庭记账程序的制作
  17. Ubuntu14.04搭建LXR本地服务器阅读Linux内核代码
  18. ”35岁没500万存款就是失败?“,35岁职场人真实存款流出!
  19. IP.SB - 在线 IPv4 / IPv6 信息查询
  20. 【将xls批量转为xlsx】

热门文章

  1. 【2022计算机综合试卷408考研第一轮_组成原理篇】第二章 计算机的发展及应用
  2. 教你怎样通过SEO做出高权重网站
  3. 天使汇9秒闪投手游专场-寻找下一个《刀塔传奇》
  4. 在微信公众平台上创建模版并获取模版 ID。 调用模版消息接口,发送模版消息。 代码如下:...
  5. 5G中非正交多址接入技术(NOMA)是什么?
  6. Dicom RTSS ROI Physical PropertiesSequence (3006,00B0)的定义和使用
  7. MFC启动RTSS实时程序
  8. h5页面如何切图_h5手机端切图的字体使用技巧
  9. 【FME实战教程】002:FME完美实现CAD数据转shp案例教程(以三调土地利用现状数据为例)
  10. android 应用 替换 logo 和 应用名字