alpine是什么 ?
是什么由于在使用docker时候,构建dockerfile 文件过于庞大,所以想找到精简版本的linux发行版特点1、小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;2、安全:面向安全的轻量发行版;3、简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。APK
是什么
由于在使用docker时候,构建dockerfile 文件过于庞大,所以想找到精简版本的linux发行版
特点
- 1、小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
- 2、安全:面向安全的轻量发行版;
- 3、简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。
- 4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。
APK包管理工具
- 1.简介
Alpine使用apk进行包管理,下面介绍常用命令
- 2.apk update
$ apk update #更新最新镜像源列表
- 3.apk search
$ apk search #查找所以可用软件包
$ apk search -v #查找所以可用软件包及其描述内容
$ apk search -v 'acf*' #通过软件包名称查找软件包
$ apk search -v -d 'docker' #通过描述文件查找特定的软件包
- 4.apk add
$ apk add openssh #安装一个软件
$ apk add openssh openntp vim #安装多个软件
$ apk add --no-cache mysql-client #不使用本地镜像源缓存,相当于先执行update,再执行add
- 5.apk info
$ apk info #列出所有已安装的软件包
$ apk info -a zlib #显示完整的软件包信息
$ apk info --who-owns /sbin/lbu #显示指定文件属于的包
- 6.apk upgrade
$ apk upgrade #升级所有软件
$ apk upgrade openssh #升级指定软件
$ apk upgrade openssh openntp vim #升级多个软件
$ apk add --upgrade busybox #指定升级部分软件包
- 7.apk del
$ apk del openssh #删除一个软件
alpine,是一个重量仅为5 MB的最小Linux发行版。它还有基本的linux工具和一个不错的包管理器APK。APK非常稳定,有相当数量的包。由于体积小,在容器中很受欢迎,但是使用上坑也很多,大部分可能是我们的无知吧。
坑1 : 下载慢
解决:
echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories \
&& echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" >> /etc/apk/repositories \
&& echo "https://mirror.tuna.tsinghua.edu.cn/alpine/edge/testing" >> /etc/apk/repositories
坑2: 找不到包
解决: 搜索 https://pkgs.alpinelinux.org/packages
,加入指定的“Branch”和“Repository”的源到/etc/apk/repositories
,就可以apk add
坑3: 安装失败
ERROR: https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community: Bad file descriptor WARNING: Ignoring APKINDEX.79f426e4.tar.gz: Bad file descriptor ERROR: unsatisfiable constraints: openssh (missing): required by: world[openssh]
解决:
apk add openssh --no-cache
#加--no-cache
, 另外,还能减少镜像体积
坑4:镜像体积大,想删除不再使用的包
apk add 加 -t
参数
-t, --virtual
NAME Instead of adding all the packages to ‘world’, create a new virtual package with the listed dependencies and add that to ‘world’; the
actions of the command are easily reverted by deleting the virtual package
这意味着当您安装软件包时,这些软件包不会添加到全局软件包中。这种变化可以很容易地回滚/删除。所以,如果我需要gcc来编译程序,但是一旦程序被编译,我就不再需要gcc了。
我可以在虚拟包中安装gcc和其他必需的包,并且可以删除所有依赖项,并删除此虚拟包名称。以下是示例用法
apk add --virtual mypacks gcc vim
apk del mypacks
使用第一个命令安装的所有18个软件包将被下一个命令删除。
注意:同一个-t参数会覆盖之前的所有安装包,所有对动态链接库最好不使用-t ,或者保证此参数不重复。
坑5:时间不同步
echo "Asia/Shanghai" > /etc/timezone
apk add –no-cache tzdata
TZ=Asia/Shanghai
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
坑6:用户(组)和宿主机不兼容
解决:
addgroup -g 1200 -S www \ && adduser -u 1200 -D -S -G www www
坑7:不兼容glibc
解决:
使用最新稳定版本的alpine,
#再安装编译环境
apk add --virtual .build-base --no-cache
autoconf \
automake \
g++ \
make \
linux-headers \
bsd-compat-headers
更多推荐
所有评论(0)