Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk,可以通过 https://pkgs.alpinelinux.org/packages 网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件。
Alpine 由非商业组织维护的,支持广泛场景的 Linux发行版,它特别为资深/重度Linux用户而优化,关注安全,性能和资源效能。Alpine 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。
Alpine Docker 镜像也继承了 Alpine Linux 发行版的这些优势。相比于其他 Docker 镜像,它的容量非常小,仅仅只有 5 MB 左右(对比 Ubuntu 系列镜像接近 200 MB),且拥有非常友好的包管理机制。官方镜像来自 docker-alpine 项目。
目前 Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。
以下特点:
1、小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
2、安全:面向安全的轻量发行版;
3、简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。
4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。
优势
劣势
Alpine Linux是一个完整的操作系统,像其他操作系统一样,可以将Alpine安装到本地硬盘中。
主要是在安装过程中,指定一些电脑的基本设置,比如键盘布局、主机名、网卡、IP地址、root口令修改、时区设置、软件仓库地址、SSH服务器、NTP客户端、系统安装方式、磁盘格式化等。
打开官网(https://alpinelinux.org/downloads/),找到对应平台的镜像下载,默认就是向x86_64镜像。
setup-alpine
不管是刻录U盘还是在虚拟机里启动,进入终端之后,输入root默认无密登陆,然后执行setup-alpine命令,在终端上启动他的安装程序。
询问键盘布局,输入cn

后面的配置选项,"hostname"、"网卡配置"、"IP地址配置"、"配置dns"等一系列选择默认即可,有需要的可以根据实际情况修改。
手动输入Asia和Shanghai

这里如果联网了,输入f回车,让程序自动匹配当前最快的软件源。可能会花一点时间。尽量不要跳过,因为后面格式化硬盘的时候需要联网安装相关的命令。
跟着的ssh和NTP默认即可

询问"Availabe disks are"和"Which disks would you like to use?"来选择安装的硬盘,可以输入"?"来列举可用硬盘,然后手动输入,这里安装到sda,也可以选择其他位置。
在询问你"How would you like to use it?",这里输入sys硬盘安装,其余的"data"、"lvm"可以了解一下。

格式化硬盘然后复制文件需要些时间,完成之后会提示"Installation is complete",这时候拔掉U盘或者设置硬盘第一启动,就可以重启了。
x#主机名文件echo "alpinelinux" > /etc/hostname #使用新设置的主机名立刻生效hostname -F /etc/hostname#DNS 服务器配置文件cat /etc/resolv.confsearch sf.comnameserver 10.118.188.2nameserver 10.118.188.3#网卡配置文件cat > /etc/network/interfaces <<EOFauto loiface lo inet loopbackauto eth0iface eth0 inet static address 192.168.56.180 netmask 255.255.255.0 gateway 192.168.56.1auto eth1iface eth1 inet dhcpEOF#修改完相关配置以后,重新启动网络服务service networking restart/etc/init.d/networking restartxxxxxxxxxxcp /etc/apk/repositories /etc/apk/repositories.org# 如果采用中国科技大学的源cat > /etc/apk/repositories <<EOFhttp://mirrors.ustc.edu.cn/alpine/v3.10/mainhttp://mirrors.ustc.edu.cn/alpine/v3.10/communityEOF#采用国内阿里云的源cat > /etc/apk/repositories <<EOFhttps://mirrors.aliyun.com/alpine/v3.10/mainhttps://mirrors.aliyun.com/alpine/v3.10/communityEOF
xxxxxxxxxx#查询相关的软件包apk search openssh#安装一个软件包apk add xxx #删除已安装的xxx软件包apk del xxx #获取更多apk包管理的命令参数apk --help #更新软件包索引文件apk update#安装常用软件apk add --update bash wget curl vim make iproute2 drill iputils#安装lrzszwget http://mirrors.gigenet.com/alpinelinux/edge/testing/x86_64/lrzsz-0.12.20-r0.apkapk add lrzsz-0.12.20-r0.apklrz -b#查看建立的TCP连接ss -ta #查询域名的信息drill blog.csdn.net @8.8.8.8 #根据IP地址,反向查找域名drill -x 8.8.8.8 @47.94.71.34 默认 alpine 没有开启远程登录权限。 ssh远程登录不了。
xxxxxxxxxx#安装openssh-server服务器apk add --update openssh-server#修改配置文件 /etc/ssh/sshd_config,#使用root用户远程管理cat >> /etc/ssh/sshd_config <<EOFPermitRootLogin yesEOF#将ssh服务配置为开机自动启动 rc-update add sshd #立刻生效/etc/init.d/sshd restartservice sshd restartservice sshd statusxxxxxxxxxx#安装Nginx软件并更新到最新apk add --update nginx#手工启动Nginx/etc/init.d/nginx startrc-service nginx statusrc-service nginx startrc-service nginx stop#将Nginx添加到启动服务中,下次开机自动运行rc-update add nginx#测试Nginx服务是否正常,使用curl访问,#默认配置会返回nginx的404页面错误,标明服务已正常:netstat -tnulpcurl 192.168.56.180因为Alpine linux使用的是musl,与常见的glibc不同,Musl是一个轻量级的C标准库。所以oracle上下载的jdk和openjdk无法直接使用。自己动手编译需要花费几倍的时间精力,可以找已经打包好了的针对musl编译的openjdk来直接安装。azul提供了针对Alpine linux的openjdk,可以直接拿来安装。
azul官网
安装过程和普通的jdk安装就没有任何区别了,下载tar包解压到安装目录,配置环境变量即可。
xxxxxxxxxxwget https://cdn.azul.com/zulu/bin/zulu8.42.0.23-ca-jdk8.0.232-linux_musl_x64.tar.gztar -xzf zulu8.42.0.23-ca-jdk8.0.232-linux_musl_x64.tar.gzmv zulu8.42.0.23-ca-jdk8.0.232-linux_musl_x64 /app/jdkcat >> /etc/profile <<EOFexport PATH=\$PATH:/app/jdk/binEOFsource /etc/profilejava -version这是作为Alpine Linux包运行的GNU C库,用于运行链接的二进制文件glibc。
xxxxxxxxxxapk --no-cache add ca-certificates wgetwget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pubwget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apkapk add glibc-2.30-r0.apk除了包之外localdef还需要glibc-bin和glibc-i18nglibc包。
You will need to generate your locale if you would like to use a specific one for your glibc application. You can do this by installing the glibc-i18n package and generating a locale using the localedef binary. An example for en_US.UTF-8 would be:
xxxxxxxxxxapk add glibc-bin-2.30-r0.apk glibc-i18n-2.30-r0.apk/usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8setup-alpine安装前面不仔细看,设置时区容易忽略,好多程序用到的时间校验就容易出问题。用到手动在alpine 下修改UTC时间为CST时间。
xxxxxxxxxxapk add tzdataln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeecho "Asia/Shanghai" > /etc/timezone
通过阅读官方说明,简单的总结一下这个镜像
xxxxxxxxxxdocker pull alpinedocker images# 由图看到只有3.99 MB大小,基于alpine而build出来的endoffight/shadowsocks-kcp也只有14.5 MB由于启用一个镜像必须有一个进程,所以我们运行ash(Bash in alpine)
xxxxxxxxxx# 启动一个容器docker run --name=al -itd alpine ash# 进入系统docker exec -it al ashxxxxxxxxxx# 更新源apk add --update# 缓存的index文件保存在/var/cache/apk/文件夹中ls -al /var/cache/apk/# 搜索nginx,目前nginx最新是1.11,1.10.3是最新的稳定版,看来库里的软件还是很新的apk search nginxnginx-1.10.3-r0...# libsodium 也有,这不是就shadowsocks而生的么?apk search libsodiumlibsodium-1.0.11-r0libsodium-dev-1.0.11-r0# 安装命令apk add --update --no-cache python openrc# 组安装,--virtual web_tools表示后面的程序都会被归到web_tools组,最后删除的时候可以一起被删apk --update add --virtual web_tools nginx php7-fpm# 删除apk del python# 列出已安装的程序apk info|sortapk -vv info|sortxxxxxxxxxx# 非docker环境的服务管理rc-service nginx startrc-service nginx stoprc-service nginx php下面进入实战环节,让我们配置一个最简单的Nginx+PHP运行环境吧!
xxxxxxxxxxdocker run --name=web -itd alpine ashdocker exec -it web ashxxxxxxxxxxapk add --no-cache --virtual web_tools nginx php7-fpm supervisorxxxxxxxxxx# supervisor 前台运行sed -i 's/\;nodaemon=false/nodaemon=true/g' /etc/supervisord.confvi /etc/supervisord.conf# 添加如下内容[program:php-fpm]command=php-fpm7 -Fstdout_logfile=/var/log/php7/php.log# /dev/stdoutstdout_logfile_maxbytes=1MBstderr_logfile=/var/log/php7/php_error.log# /dev/stderrstderr_logfile_maxbytes=1MB[program:nginx]command=nginx -g 'daemon off;'stdout_logfile=/var/log/nginx/nginx.logstdout_logfile_maxbytes=1MBstderr_logfile=/var/log/nginx/nginx_error.logstderr_logfile_maxbytes=1MBxxxxxxxxxxtrue > /etc/nginx/conf.d/default.confvi /etc/nginx/conf.d/default.conf# addserver { listen 80; root /www; index index.html index.htm index.php; server_name localhost; client_max_body_size 32m; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/lib/nginx/html; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } }xxxxxxxxxxvi /www/index.php# add<?phpecho "Hello world!\n";xxxxxxxxxx/usr/bin/supervisord外部新启一个终端查看
xxxxxxxxxxdocker exec -it web ashcurl lcoalhost# get# Hello world!完