Alpine介绍与apk的基本使用

前言

Alpine是一个面向安全的轻量级的Linux发行版,相比与CentOS,ubuntu体积小很多,大约只有5M左右,由于体积小的原因,在很多场景下都会使用它来按需制作一些轻量级镜像,虽然体积小但它也有着自己的包管理工具apk来安装需要的软件,类似于CentOS中的yum、ubuntu中的apt-get

Alpine使用的c库是使用mini版的musl libc与其他Linux发行版使用的gnu libc不一样。虽说号称兼容,但也只是部分兼容了,缺啥补啥就是,通过一个软链接来关联。

注意:终究不是正统的glibc,对于一些强依赖glibc的系统建议不要使用Alpine,比如使用了Oracle JDK的系统,建议在Alpine换成OpenJDK,很多强依赖于glibc的大型项目一般也不会提供基于Alpine的Dockerfile,比如tomcat

Alpine镜像

使用docker pull拉取

# 拉取
docker pull alpine:latest
# 查看镜像 大约只有5M
docker images|grep alpine
alpine   latest          c059bfaa849c   12 months ago   5.59MB

apk

镜像源

一般这种需要从公网拉取镜像的都需要设置镜像源,因为默认镜像源在国外,下载会比较慢。比较出名的有清华大学源 、中科大源、阿里云源等

清华大学的很多源不仅是apk源,都可以在下面链接中查找

https://mirror.tuna.tsinghua.edu.cn/help
# 清华大学源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
# 阿里云源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 中科大源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
运行

Alpine为了精简体积是没有bash的,使用sh运行即可。

[root@node01 ~]# docker run -it --name=alpine alpine:latest /bin/sh
## 查看版本
/ # cat /etc/alpine-release 
3.15.0
apk基础命令
/ # apk -h
apk-tools 2.12.7, compiled for x86_64.

usage: apk [<OPTIONS>...] COMMAND [<ARGUMENTS>...]

Package installation and removal:
  add        Add packages to WORLD and commit changes
  del        Remove packages from WORLD and commit changes

System maintenance:
  fix        Fix, reinstall or upgrade packages without modifying WORLD
  update     Update repository indexes
  upgrade    Install upgrades available from repositories
  cache      Manage the local package cache

Querying package information:
  info       Give detailed information about packages or repositories
  list       List packages matching a pattern or other criteria
  dot        Render dependencies as graphviz graphs
  policy     Show repository policy for packages
  search     Search for packages by name or description

Repository maintenance:
  index      Create repository index file from packages
  fetch      Download packages from global repositories to a local directory
  manifest   Show checksums of package contents
  verify     Verify package integrity and signature

Miscellaneous:
  audit      Audit system for changes
  stats      Show statistics about repositories and installations
  version    Compare package versions or perform tests on version strings

This apk has coffee making abilities.
For more information: man 8 apk

我们常用的命令如下

apk add 安装软件

apk del 删除软件

apk upgrade 升级软件

apk info 列出已安装的软件信息

apk search 通过名字或描述搜索有没有改软件

apk fetch  从仓库下载软件到本地目录,下载下来的是.apk包

真正使用时还会有一些额外的参数可以设置大家可以通过 --help查看 如 apk add -h

常用的额外参数如下

# 全局参数
--no-cache 不使用本地缓存
--no-network 不使用公网操作

# add
-l 总是选择latest版本
-u 升级包以及它依赖的包
--no-chown 不改变包原来的owner or group

# del
-r 递归删除依赖

# fetch
-o 下载的包保存到指定目录
-R 同时下载依赖

# info
-d 显示描述信息
-R 显示依赖包
-s 显示大小
使用

时区

UTC 国际协调时间,默认时间 0时区
GMT 格林威治时间 0时区
CST 美国、澳大利亚、古巴或中国的标准时间 显然我们应该使用CST,通常使用Shanghai时区 +8

查看当前时区

/ # date
Tue Dec  6 08:07:55 UTC 2022

安装时区

/ # apk add tzdata
(1/1) Installing tzdata (2022f-r1)
Executing busybox-1.34.1-r3.trigger
OK: 9 MiB in 15 packages

## 多了一个zoneinfo目录,里面有各种时区
/ # ls -ld /usr/share/zoneinfo/
drwxr-xr-x   19 root     root          4096 Dec  6 08:13 /usr/share/zoneinfo/

## 使用上海时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" /etc/timezone

## 再次查看当前时区
/ # date
Tue Dec  6 16:21:08 CST 2022
/ # date -R
Tue, 06 Dec 2022 16:21:15 +0800

下载软件

通常公司的环境是不连外网的,如果缺少包可以在外网通过apk fetch 将对应apk包及其依赖下载下来,然后上传至公司环境,然后通过apk add xx.apk即可安装,下面通过下载tzdata演示

## 创建文件夹
~ # mkdir -p /root/tzdata

## 下载tzdata及其依赖包到/root/tzdata目录
~ # apk fetch -R -o /root/tzdata tzdata
Downloading tzdata-2022f-r1
Downloading musl-1.2.2-r7

## 查看/root/tzdata目录多了两个apk包 musl-1.2.2-r7.apk tzdata-2022f-r1.apk
~ # ls -l /root/tzdata/
total 812
-rw-r--r--    1 root     root        383152 Oct 18  2021 musl-1.2.2-r7.apk
-rw-r--r--    1 root     root        443978 Nov  6 19:34 tzdata-2022f-r1.apk

## 删除安装好的tzdata及其依赖
~/tzdata # apk del -r tzdata
(1/1) Purging tzdata (2022f-r1)
Executing busybox-1.34.1-r3.trigger
OK: 6 MiB in 14 packages

## 时间已经变为 UTC
~/tzdata # date
Tue Dec  6 08:43:31 UTC 2022

## 安装/root/tzdata目录的.apk包
## ls |xargs -n 1 列出所有的包一个个add,对于依赖包比较多的时候方便
~/ cd /root/tzdata
~/tzdata # ls |xargs -n 1 |xargs apk add --no-network
(1/1) Installing tzdata (2022f-r1)
Executing busybox-1.34.1-r3.trigger
OK: 9 MiB in 15 packages

## 时间已经变回来,因为之前的软连接没删,安装后自动软链了
~/tzdata # date
Tue Dec  6 16:45:34 CST 2022

Alpine的简单介绍与apk命令的基本使用就介绍到这里了,后面介绍Alpine中会碰到的一些问题。



作者:倦juan
链接:https://www.jianshu.com/p/c338550dc73c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2022-12-14 19:54  牧之丨  阅读(311)  评论(0编辑  收藏  举报