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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Alpine介绍与apk的基本使用的更多相关文章
- 搭建alpine仓库 提供apk包
搭建alpine私有仓库从官方拉取alpine所有的包 wget -r -np -nH http://nl.alpinelinux.org/alpine/v3.5/main/x86_64/ wget ...
- 把玩Alpine linux(二):APK包管理器
导读 Alpine Linux非常精简,开机内存占用也在二三十兆大,没有拆箱即用,就需要我们自己去做一些了解和配置 Alpine Linux的优劣 优势 Alpine Linux的Docker镜像特点 ...
- Python - 安装 - 在 Alpine Linux 下安装 Python2
概述 在 Alpine Liunx 下安装 python2 感觉又是水了一发... 感觉还是有点丢人, 就像在帮小学生写作业, 写完了后还想找人夸我... 最近看 docker 和 jenkins, ...
- 基于Alpine镜像定制自己的工具箱
Alpine介绍 Alpine 操作系统是一个面向安全的轻型 Linux 发行版.目前 Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境.这样会带来多个好处. ...
- android apk 防止反编译技术第四篇-对抗JD-GUI
又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...
- Android:apk文件结构
Android apk文件,即Android application package文件. 每个要安装到Android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk,其中包含了应用的二进制 ...
- android apk 自我保护技术-加密apk
经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法.前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blo ...
- 如何加密android apk
经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法.前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blo ...
- 基于alpine用dockerfile创建的ssh镜像
1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...
- android的apk文件结构
什么是APK?APK文件都由那些组成?不懂没关系,让小编来为你详细解答. 一.APK简介与描述 APK是AndroidPackage的缩写,即Android安装包(apk).APK是类似Symbian ...
随机推荐
- 「模拟赛」A 层多校联训 4(卖品:CTH)
双倒一啦! 感觉这次最大的错误就是没看 T2.(本质原因还是时间浪费的太多了) 赛时记录在闲话啦 accoder 多校比赛链接 02 表示法 唐诗题!考高精的人都\(**\),输出深度优先搜索解决.高 ...
- Pytorch 实现 GAN 网络
Pytorch 实现 GAN 网络 原理 GAN的基本原理其实非常简单,假设我们有两个网络,G(Generator)和D(Discriminator).它们的功能分别是: G 是一个生成网络,它接收一 ...
- 我们在 vue 项目中如何做路由导航守卫
一般在 src 文件夹新建一个 permission 文件 ,单独用来做路由导航守卫业务 ,在 main.js 导入文件即可 : 主要功能有 判断是否有 token ,以此判断用户是不是登录了 :
- 深入解析Spring AI框架:在Java应用中实现智能化交互的关键
今天我们的Spring AI源码分析主题即将结束.我已经对自己感兴趣的基本内容进行了全面的审视,并将这些分析分享给大家.如果你对这个主题感兴趣,可以阅读以下几篇文章.每篇文章都层层递进,深入探讨相关内 ...
- go~wasm插件的开发
Go和TinyGo是两种不同的Go语言编译器,它们之间有以下几点区别: 目标平台: Go:Go语言编译器主要面向通用计算机平台,如Windows.Linux.macOS等. TinyGo:TinyGo ...
- 安装gd库出错
最近手痒,就安装了一个centos 6.5玩玩. 由于新的centos的当前版本已经达到7.1. 而且最糟的是在本人不小心的时候在安装软件的时候, 确定里里面的更新系统命令,导致版本变为了6.9. 然 ...
- Mongo oplog理解
转载请注明出处: oplog(操作日志)是MongoDB中用于记录所有写操作的日志.它是一个特殊的集合,存储在副本集的主节点中.oplog用于确保副本集中的副节点与主节点的数据保持一致.当主节点执行写 ...
- Git项目提交规范结合Husky + commitlint使用
一.前置条件 为了更好地 GIT 提交,加入了代码提交规范和规范校验,优雅的提交: 方便团队协作和快速定位问题,采取 Husky + commitlint 辅助项目做约定. npm install ...
- 阿里云免费SSL证书申请全过程(图文详解)
下面我们来详细说下阿里云的域名是如何注册购买,解析绑定的. 首先,打开阿里云官网 万网早就被阿里云收购了,所以是同一家.输入你想购买的域名,我这里是随便输入了"aliyun.com&quo ...
- MySQL造数据,批量插入数据脚本
新建表 create table bigdata( name varchar(32), age int(32), createTime datetime); MySQL批量插入数据脚本 #!/bin/ ...