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
使用docker pull拉取
# 拉取
docker pull alpine:latest
# 查看镜像 大约只有5M
docker images|grep alpine
alpine latest c059bfaa849c 12 months ago 5.59MB
一般这种需要从公网拉取镜像的都需要设置镜像源,因为默认镜像源在国外,下载会比较慢。比较出名的有清华大学源 、中科大源、阿里云源等
清华大学的很多源不仅是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 -h
apk-tools 2.12.7, compiled for x86_64.usage: apk [...] COMMAND [...]Package installation and removal:add Add packages to WORLD and commit changesdel Remove packages from WORLD and commit changesSystem maintenance:fix Fix, reinstall or upgrade packages without modifying WORLDupdate Update repository indexesupgrade Install upgrades available from repositoriescache Manage the local package cacheQuerying package information:info Give detailed information about packages or repositorieslist List packages matching a pattern or other criteriadot Render dependencies as graphviz graphspolicy Show repository policy for packagessearch Search for packages by name or descriptionRepository maintenance:index Create repository index file from packagesfetch Download packages from global repositories to a local directorymanifest Show checksums of package contentsverify Verify package integrity and signatureMiscellaneous:audit Audit system for changesstats Show statistics about repositories and installationsversion Compare package versions or perform tests on version stringsThis 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中会碰到的一些问题。
欢迎关注,学习不迷路!