Alpine包管理工具apk使用介绍

本文介绍了Alpine Linux的包管理工具apk的使用,包括更新、搜索、安装、删除等常见操作。通过示例展示了如何在Alpine容器中管理软件包,如安装gcc及其依赖,并通过apk stats和apk info了解包信息。此外,还提到了apk add的几种用法,如指定版本安装和离线安装。
摘要由CSDN通过智能技术生成

在这里插入图片描述

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

什么是apk

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

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

而具体实现上述两部分功能的工具则是apk和lbu
在这里插入图片描述

这篇文章主要介绍包管理工具apk的使用方法。常见命令的使用说明如下所示:
在这里插入图片描述

环境准备

在本文接下来的内容中将就上述命令的常见用法进行整理和总结,验证的环境为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命令用于更新本地索引,这样很多操作才能执行,否则会提示相关的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
在这里插入图片描述

常见用法: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可以查询包

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

stats

在这里插入图片描述

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

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

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 Collection

gcc-8.3.0-r0 webpage:
http://gcc.gnu.org

gcc-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
在这里插入图片描述

以安装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: 24
  dirs: 125
  files: 866
  bytes: 96833536
  triggers: 1
available:
  names: 24063
  packages: 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
在这里插入图片描述

以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也发挥着越来越重要的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值