Alpine Linux详解

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: Alpine以其小巧、简单在docker容器中得到了广泛的应用。但是Alpine Linux使用了musl,可能和其他Linux发行版使用的glibc实现会有些不同。这里主要介绍了它的基础用法,但是足以满足日常运维需要。

简介

Small. Simple. Secure.Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.

Alpine Linux 是一个社区开发的面向安全应用的轻量级Linux发行版。 Alpine 的意思是“高山的”,它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk。

适用环境

由于其小巧、安全、简单以及功能完备的特点,被广泛应用于众多Docker容器中。我司目前使用的基础镜像均是基于该系统,dockerhub上有提供各种语言的基础镜像.如:node:8-alpinepython:3.6-alpine,同时也可以基于alpine镜像制作符合自己需求的基础镜像。

简单的镜像构建示例

这里提供一个python3的基础镜像的Dockerfileget-pip.py可在 https://pip.pypa.io/en/latest/installing/ 下载。

FROM alpine

MAINTAINER guoxudong@keking.cn

# 拷贝安装pip的脚本
COPY get-pip.py /get-pip.py

# 设置alpine的镜像地址为阿里云的地址
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/main/" > /etc/apk/repositories \
    # 安装依赖包
    && apk update \
    && apk add --no-cache bash \
    # libevent-dev libxml2-dev  libffi libxml2 libxslt libxslt-dev  \
    python3 gcc g++ python3-dev python-dev linux-headers libffi-dev openssl-dev \
    # 由于通过apk安装的pip总是基于python2.7的版本,不符合项目要求,此处使用get-pip.py的方式
    #安装基于python3.6的pip
    && python3 /get-pip.py \
    # 删除不必要的脚本
    && cd .. \
    && rm -f /get-pip.py \
    # 此环境专用做运行django项目,因此移除不必要的工具,减少空间
    #    && pip uninstall -y pip setuptools wheel \
    # 最后清空apk安装时产生的无用文件
    && rm -rf /var/cache/apk/*

对比:同样版本的python,对比镜像大小,可见使用alpine的优势

~ docker images | grep python
python                                  3.4                 ccbffa0d70d9        2 months ago        922MB
alpine-python3                          latest              69e41b673a50        2 months ago        297MB

apk包管理

  • 镜像源配置

    官方镜像源列表:http://dl-cdn.alpinelinux.org/alpine/MIRRORS.txt

    MIRRORS.txt中是当前Alpine官方提供的镜像源(Alpine安装的时候系统自动选择最佳镜像源)

    国内镜像源

    镜像源配置

    这里推荐使用阿里云镜像源,由于公司应用都是部署在阿里云上,使用阿里云镜像源会快很多

    $ vi /etc/apk/repositories
    # 将这两行插入到repositories文件开头
    http://mirrors.aliyun.com/alpine/v3.9/main
    http://mirrors.aliyun.com/alpine/v3.9/community
    # 后面是原有的默认配置
    http://dl-cdn.alpinelinux.org/alpine/v3.8/main
    http://dl-cdn.alpinelinux.org/alpine/v3.8/community
    
  • apk包管理命令

    这里介绍一些常用的操作apk包管理命令

    • apk --help可以查看完整的包管理命令
    bash-4.3# apk --help
    apk-tools 2.10.0, compiled for x86_64.
    
    Installing and removing packages:
    add       Add PACKAGEs to 'world' and install (or upgrade) them, while ensuring that all dependencies are met
    del       Remove PACKAGEs from 'world' and uninstall them
    
    System maintenance:
    fix       Repair package or upgrade it without modifying main dependencies
    update    Update repository indexes from all remote repositories
    upgrade   Upgrade currently installed packages to match repositories
    cache     Download missing PACKAGEs to cache and/or delete unneeded files from cache
    
    Querying information about packages:
    info      Give detailed information about PACKAGEs or repositories
    list      List packages by PATTERN and other criteria
    dot       Generate graphviz graphs
    policy    Show repository policy for packages
    
    Repository maintenance:
    index     Create repository index file from FILEs
    fetch     Download PACKAGEs from global repositories to a local directory
    verify    Verify package integrity and signature
    manifest  Show checksums of package contents
    
    Use apk <command> --help for command-specific help.
    Use apk --help --verbose for a full command listing.
    
    This apk has coffee making abilities.
    
    • apk info 列出所有已安装的软件包
    • apk apk update 更新最新本地镜像源
    • apk upgrade 升级软件
    • apk search 搜索可用软件包,搜索之前最好先更新镜像源

      bash-4.3# apk search #查找所以可用软件包
      bash-4.3# apk search -v #查找所以可用软件包及其描述内容
      bash-4.3# apk search -v 'acf*' #通过软件包名称查找软件包
      bash-4.3# apk search -v -d 'docker' #通过描述文件查找特定的软件包

    • apk add 从仓库中安装最新软件包,并自动安装必须的依赖包,也可以从第三方仓库添加软件包

      bash-4.3# apk add curl busybox-extras       #软件以空格分开这里,这里列举我们用的最多的curl和telnet
      bash-4.3# apk add --no-cache curl
      bash-4.3# apk add mongodb --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.6/main/ --allow-untrusted    #从指定镜像源拉取
      
      • 安装指定版本软件包

        bash-4.3# apk add mongodb=4.0.5-r0
        bash-4.3# apk add 'mongodb<4.0.5'
        bash-4.3# apk add 'mongodb>4.0.5'
        
      • 升级指定软件包

        bash-4.3# apk add --upgrade busybox #升级指定软件包
        

    :安装之前最好修改本地镜像源,更新镜像源,搜索软件包是否存在,选择合适岸本在进行安装。

    • apk del 卸载并删除指定软件包

结语

Alpine以其小巧、简单在docker容器中得到了广泛的应用。但是Alpine Linux使用了musl,可能和其他Linux发行版使用的glibc实现会有些不同。这里主要介绍了它的基础用法,但是足以满足日常运维需要。毕竟在kubernetes集群中操作容器内环境较直接在虚拟机或者物理机上操作更为复杂,由于缩减的容器的大小,导致和CentOS或Ubuntu相比缺少许多功能。而缺少的这些功能又不想在基础镜像中安装导致容器变大,这个时候就可以在容器运行后,根据实际需要安装即可。

参考文档

https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
Ubuntu Java Linux
alpine Linux与基于alpine制作JDK8镜像
Docker commit 命令 1.下载基础镜像 2.使用此基础镜像创建/启动/进入容器 3.在容器安装自己需要的软件 4.将保存配置完成的容器提交成镜像 语法如下 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] OPTIONS说明: -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。 实例:将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明
|
7月前
|
Linux 网络安全
百度搜索:蓝易云【如何在 Alpine Linux 上启用或禁用防火墙?】
请注意,以上命令将在当前会话中立即更改防火墙状态。如果你希望在系统启动时自动启用或禁用防火墙,请相应地调整配置。具体配置方式可能因使用的版本和环境而有所不同,你可以参考Alpine Linux的官方文档或相关资源来获取更多信息。
174 0
|
12月前
|
Ubuntu Linux C语言
寻根究底,为什么 Docker 中的 Alpine Linux 镜像能这么小?
在这篇文章中,我以 Docker 中的 Alpine 与 Debian 镜像来详细对比它们的大小,及导致它们大小的原因。我们都知道,Debian 比 Ubuntu 更精简,这样对比会更有价值。
462 0
|
Linux
Alpine Linux域名区分大小写问题排查
alpine linux的hostname没有忽略大小写
1439 0
|
安全 Linux Docker
Alpine Linux:从漏洞发现到代码执行
本文讲的是Alpine Linux:从漏洞发现到代码执行,我最近在Alpine Linux的软件包管理器中发现了两个关键的漏洞,分别是CVE-2017-9669和CVE-2017-9671,如果你正在使用Alpine Linux,这两个漏洞可能会导致攻击者在你的计算机上执行恶意代码。
1716 0
|
NoSQL 安全 Shell
Alpine Linux 之漏洞利用(二):软件包管理器漏洞分析
本文讲的是Alpine Linux 之漏洞利用(二):软件包管理器漏洞分析,在Alpine Linux 漏洞利用的第一部分《Alpine Linux:从漏洞发现到代码执行》,我对Alpine Linux的软件包管理器中的两个关键漏洞, CVE-2017-9669和CVE-2017-9671做了深入的分析。
2197 0
|
安全 Linux 网络虚拟化
|
网络协议 Linux Docker
通过Docker、Alpine Linux和Unbound实现DNS服务器托管
通过Docker、Alpine Linux和Unbound实现DNS服务器托管
4082 0
|
3天前
|
SQL 缓存 监控