简介
Alpine Linux是创始于2010年4月及以前的、一款开源社区开发的、基于musl libc和BusyBox的轻量级Linux发行版;适合用来做路由器、防火墙、VPNs、VoIP 盒子以及服务器的操作系统。Alpine 的意思是“高山的”。
Alpine Linux 围绕 musl libc 和 busybox 构建。这使得它比传统的 GNU/Linux 发行版更小,更节省资源。
一个容器只需不超过 8 MB 的空间。而在磁盘中的最小安装仅要大约 130 MB 的存储空间。
尽管体积很小,Apline 提供了完整的 Linux 环境,其存储库中还包含了大量的软件包备选。
除此之外,Alpine 还对软件包进行了缩减和拆分,以使用户能够对安装内容有更精确的控制,进一步帮助减少安装体积并提高效率。
它专注于安全、简单和高效,以最小化系统资源消耗和攻击面。
Alpine Linux 在设计时注重安全性。
内核采用了一个非官方的 grsecurity/PaX 移植版本(3.8 版本已终止对 grsecuiry 移植版本的支持),并且所有用户空间的二进制文件被编译为位置独立可执行文件(Position Independent Executables)并启用堆栈粉碎保护。
这些积极的安全功能可有效防止某些种类的 0-day 攻击。
Alpine Linux采用apk包管理器,使软件安装和更新变得简单和快速。
Alpine Linux 设计清晰而简练。它采用自有的名为 apk 的包管理器,以 OpenRC 作为初始化(init)系统,安装由脚本驱动。其提供的 Linux 环境简单、清晰且没有任何「噪音」。然后,用户可以基于此添加项目所需的软件包。因此,在各种应用场景下,Alpine 的设计都不会为用户带来麻烦。
它也可以作为容器镜像的基础操作系统。因为它的镜像非常小,这使得它适合于云原生应用和微服务架构。
由于其小巧、安全、简单以及功能完备的特点,被广泛应用于众多Docker容器中。
我司目前使用的基础镜像均是基于该系统;
dockerhub上有提供各种语言的基础镜像.如:node:8-alpine、python:3.6-alpine,同时也可以基于alpine镜像制作符合自己需求的基础镜像。
官方地址:https://www.alpinelinux.org
知识库:https://wiki.alpinelinux.org/wiki/Main_Page
版本
STANDARD:最小的可启动镜像,需要网络才能安装。
EXTENDED:包括最常用的软件包。适用于路由器和服务器。从RAM运行。扩展版本,带有更多软件包。
NETBOOT:netboot的内核、initramfs和modloop。
MINI ROOT FILESYSTEM:最小系统版本,仅包含内核,只用于构建Docker镜像。
VIRTUAL:与STANDARD类似,但更小,更适合虚拟系统使用。
XEN:内置XEN Hypervisor支持。
RASPBERRY PI:带有树莓派内核的版本。
GENERIC ARM:带有ARM内核,带有uboot加载器。
2010年04月09日,Alpine Linux 1.9.0 发布。 2010年11月03日,Alpine Linux 2.1.0 发布。 变化:这是一个稳定版本基于Linux 2.6.35。一些比较有趣的软件更新包括gcc 4 5 1,gdb - 7.2,perl - 5.12等。 最初支持PHP /请添加。最初的支持增加了对udev替代busybox mdev,这意味着hotplugging工作在xorg。 2011年05月04日,Alpine Linux 2.2.0 发布。 2016年01月06日,Alpine Linux 3.3.1 发布。 2019年06月26日,Alpine Linux 3.8.0 发布,其属于 3.8 稳定系列。
源/镜像
官方镜像源列表
http://dl-cdn.alpinelinux.org/alpine/MIRRORS.txt
MIRRORS.txt中是当前Alpine官方提供的镜像源(Alpine安装的时候系统自动选择最佳镜像源)
清华大学:https://mirror.tuna.tsinghua.edu.cn/alpine/
中国科技大学:http://mirrors.ustc.edu.cn/alpine/
阿里云:https://mirrors.aliyun.com/alpine
网易:https://mirrors.163.com/alpine/
以配置阿里云镜像源为例:
a. 编辑 /etc/apk/repositories
b. 将里面 dl-cdn.alpinelinux.org 的 改成 mirrors.aliyun.com ; 保存退出即可
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
实践应用
1 安装部署
1.1 基于Alpine Linux与JDK的Docker微服务
示例1:
reference-doc,alpine - Official Image | Docker Hub
Use like you would any other base image
FROM alpine:3.14 RUN apk add --no-cache mysql-client ENTRYPOINT ["mysql"]
docker安装:
docker pull alpine:latest
示例2:
微服务的 Dockerfile
# 启用自定义 Dockerfile # 更换 Java 运行环境: 由 JRE 换为 JDK # FROM alpine:3.17 # RUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.17/main/ > /etc/apk/repositories FROM artifactory.xxxx.cn/docker-remote/eclipse-temurin:8-jdk-alpine COPY target/app.jar . # aliyun #RUN sed -i 's#http[s]*://[^/]*#http://mirrors.aliyun.com#g' /etc/apk/repositories \ # && echo 'http://mirrors.aliyun.com/alpine/edge/testing' >> /etc/apk/repositories \ # && apk update \ # && apk add fontconfig freetype font-dejavu-sans-mono-nerd libgcc libstdc++ \ # && apk add --no-cache --virtual .tzdata tzdata \ # && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ # && echo "Asia/Shanghai" > /etc/timezone \ # && apk del --no-network .tzdata \ # rm -rf /usr/local/*.apk /tmp/* /var/cache/apk/* # huawei-cloud https://mirrors.huaweicloud.com/home --> Alpine镜像[SDK] # 创建目录的原因 `mkdir -p /tmp/springboot-xxx-app` : 在每个镜像(环境)下都会创建本目录,但目前仅用于压测环境传输出特定文件至OSS而使用(参见 pt.yaml 相关配置) RUN sed -i "s#http[s]*://[^/]*#https://repo.huaweicloud.com#g" /etc/apk/repositories \ && echo 'https://repo.huaweicloud.com/alpine/edge/testing' >> /etc/apk/repositories \ && apk update \ && apk add curl \ && apk add fontconfig freetype font-dejavu-sans-mono-nerd libgcc libstdc++ \ && apk add --no-cache --virtual .tzdata tzdata \ && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone \ && apk del --no-network .tzdata \ && rm -rf /usr/local/*.apk /tmp/* /var/cache/apk/* \ && mkdir -p /tmp/springboot-xxx-app #RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ # && echo "Asia/Shanghai" > /etc/timezone # 内存溢出时,生成 dump 日志 ENV JAVA_OPTS $JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintCommandLineFlags -XX:HeapDumpPath=/logs/dump.log -XX:+PrintGCDetails -XX:-OmitStackTraceInFastThrow # 限制、分配应用程序的内存 ( -Xmx 堆区的的最大内存, -Xms 堆区初始大小, -Xmn (堆区)新生代大小, -XX:MaxMetaspaceSize 元空间的最大值 ) ## ENV JAVA_OPTS $JAVA_OPTS -server -Xmn256m -Xms512m -Xmx512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m #-XX:+HeapDumpOnOutOfMemoryError -XX:+PrintCommandLineFlags -XX:HeapDumpPath=/logs/dump.log -XX:+PrintGCDetails -XX:-OmitStackTraceInFastThrow #-server -Xmn256m -Xms512m -Xmx512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m ENTRYPOINT exec java -server ${JAVA_OPTS:-} -jar app.jar
# 查看内核 cat /etc/os-release
如何安装:
如何在我的电脑上安装Alpine Linux?
从Alpine Linux的官方网站上下载适合您计算机架构的ISO映像文件。
将ISO映像文件刻录到DVD或USB驱动器上。
将DVD或USB驱动器插入您的计算机,并重启计算机。
在计算机启动时,按下相应的键进入BIOS设置,以便从DVD或USB驱动器启动计算机。
选择“Install”选项来开始安装过程。
在安装向导中,选择语言、时区和键盘布局等设置。
分区您的硬盘并选择安装位置。
设置root用户密码和其他用户账户。
选择要安装的软件包并确认安装。
安装完成后,重启计算机并移除DVD或USB驱动器。
登录到Alpine Linux系统并开始使用。
APK包管理器
Alpine Linux自带的apk包管理器十分好用,而且软件包更新速度很快,一般search和add两个命令就能搞定软件包依赖问题
# 查询软件包 / 搜索可用软件包,搜索之前最好先更新镜像源 apk search wget apk search # 查找所有可用软件包 apk search -v # 查找所用可用软件包及其描述内容 apk search -v '包名' # 通过软件包名称查找软件包 apk search -v -d 'docker' # 通过描述文件查找特定的软件包 # 安装软件 apk add 从仓库中安装最新软件包,并自动安装必须的依赖包,也可以从第三方仓库添加软件包 --no-cache 不使用本地镜像源缓存,相当于先执行update,再执行add -U 下载该包的最新版本 apk add wget apk add openssh # 安装一个软件 apk add openssh vim bash nginx # 安装多个软件 apk add --no-cache mysql-client # 不使用本地镜像源缓存,相当于先执行update,再执行add # 查看软件信息 apk info # 列出所有已安装的软件包 apk info -a zlib # 显示完整的软件包信息 apk info --who-owns /usr/sbin/nginx # 显示指定文件属于的包 # 升级软件 apk upgrade # 升级所有软件 apk upgrade openssh # 升级指定软件 apk upgrade openssh vim bash nginx # 升级多个软件 apk add --upgrade busybox # 指定升级部分软件包 # 删除已安装的软件 apk del wget apk del openssh # 删除一个软件 apk del nginx mysql # 删除多个软件 # 更新软件包索引文件 / 更新最新镜像源列表 apk update # 获取更多apk包管理的命令参数 apk --help
Alpine服务管理
Alpine服务管理官方文档:https://wiki.alpinelinux.org/wiki/OpenRC
Alpine Linux使用OenRC作为其初始化系统
rc-update # 主要用于不同运行级增加或者删除服务 add <service> <runlevel> del <service> <runlevel> rc-service # 主用于管理服务的状态 <service> <start stop restart> rc-status # 要检查服务及其设置的运行级别 rc <runlevel> # 更改运行级别 可用运行级别: default #未指定时则默认该级别 hotplugged manual 特殊运行级别:具体参考上方的官方文档,这里不多做解释。
应用场景
如何在Alpine Linux上配置网络设置?
打开终端并以root用户身份登录。
输入以下命令来编辑网络配置文件:
vi /etc/network/interfaces
在文件中添加以下内容:
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp
这将启用本地环回接口和以DHCP方式配置eth0网络接口。
如果您的网络需要其他配置,请将上述内容替换为您的网络设置。
保存并退出编辑器。
重启网络服务以使更改生效:
/etc/init.d/networking restart
检查网络连接是否正常:
ping google.com 如果能够ping通,则说明网络连接正常。
如何在Alpine Linux上安装Python环境?
打开终端并以root用户身份登录。
输入以下命令来安装Python和pip包管理器:
apk add python3 py3-pip
等待安装完成后,输入以下命令来确认Python已经安装成功:
python3 --version
如果能够正确显示Python的版本号,则说明Python已经成功安装。
(可选)如果您希望安装特定的Python包或库,可以使用pip命令来进行安装。例如,要安装numpy库,可以输入以下命令:
pip install numpy
这将安装最新版本的numpy库。
如何在Alpine Linux上安装和使用Docker?
打开终端并以root用户身份登录。
添加Docker官方GPG密钥:
apk add docker
安装Docker:
apk add docker
启动Docker服务:
rc-update add docker boot service docker start
确认Docker已正确安装和运行:
docker info
如果您希望使用非root用户来运行Docker容器,则需要将该用户添加到docker组:
adduser username docker
其中,username是您要添加到docker组的用户名。
退出终端并重新登录以使更改生效。
现在已经成功在Alpine Linux上安装并配置了Docker。可以使用Docker命令来搜索、下载和运行Docker容器镜像。例如,要搜索可用的Docker镜像,可以输入以下命令:
docker search [镜像名称]
其中,[镜像名称]是要搜索的Docker镜像的名称。
要下载和运行Docker镜像,可以使用以下命令:
docker run [选项] [镜像名称]
其中,[选项]是可选的运行参数,[镜像名称]是您要下载和运行的Docker镜像的名称。
http://www.savh.cn/thread-1627.htm
转载请注明:Savh.Cn 发表