基于Alpine镜像定制自己的工具箱
Alpine介绍
Alpine 操作系统是一个面向安全的轻型 Linux 发行版。目前 Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。
Alpine的特点:
- 小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
- 安全:面向安全的轻量发行版;
- 简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。
- 适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。
# 拉取镜像
[root@master src]# docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
df20fa9351a1: Already exists
Digest: sha256:185518070891758909c9f839cf4ca393ee977ac378609f700f60a771a2dfe321
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
# 查看镜像大小
[root@master ~]# docker images | grep alpine
alpine latest a24bb4013296 4 weeks ago 5.57MB
# 运行镜像
[root@master src]# docker run -it alpine:latest
/ #
Alpine软件包管理
1. 配置软件源
Alpine源配置文件
/ # cat /etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/v3.11/main
http://dl-cdn.alpinelinux.org/alpine/v3.11/community
由于种种原因,官方源在国内很慢,甚至无法连接,我们将其改为国内镜像源
/ # echo "https://mirrors.aliyun.com/alpine/v3.6/main/" > /etc/apk/repositories
/ # echo "https://mirrors.aliyun.com/alpine/v3.6/community/" >> /etc/apk/repositories
/ # cat /etc/apk/repositories
https://mirrors.aliyun.com/alpine/v3.6/main/
https://mirrors.aliyun.com/alpine/v3.6/community/
使用下面的这个可以始终使用最新版的
echo "https://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories
echo "https://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
2. 软件包管理
alpine 提供了非常好用的apk软件包管理工具,可以方便地安装、删除、更新软件。
查询软件
/ # apk search curl
lua5.2-curl-0.3.5-r2
uwsgi-alarm_curl-2.0.17-r0
py2-curl-7.43.0-r3
libcurl-7.61.1-r2
py3-curl-7.43.0-r3
py-curl-7.43.0-r3
curl-dev-7.61.1-r2
lua5.3-curl-0.3.5-r2
curl-7.61.1-r2
asterisk-curl-14.7.8-r0
php7-curl-7.1.17-r0
curl-dbg-7.61.1-r2
uwsgi-curl_cron-2.0.17-r0
lua5.1-curl-0.3.5-r2
lua-curl-0.3.5-r2
curl-doc-7.61.1-r2
php5-curl-5.6.40-r0
collectd-curl-5.6.2-r1
gst-plugins-bad1-1.10.4-r1
安装软件
/ # apk add curl
fetch https://mirrors.aliyun.com/alpine/v3.6/main/x86_64/APKINDEX.tar.gz
fetch https://mirrors.aliyun.com/alpine/v3.6/community/x86_64/APKINDEX.tar.gz
(1/6) Installing libressl2.5-libcrypto (2.5.5-r2)
(2/6) Installing ca-certificates (20161130-r3)
(3/6) Installing libssh2 (1.8.2-r0)
(4/6) Installing libressl2.5-libssl (2.5.5-r2)
(5/6) Installing libcurl (7.61.1-r2)
(6/6) Installing curl (7.61.1-r2)
Executing busybox-1.31.1-r9.trigger
Executing ca-certificates-20161130-r3.trigger
OK: 9 MiB in 20 packages
安装软件指定版本
apk add packagename=11.0.2-r0
apk add "packagename>1.2.3-r0" # 设置最小版本
安装本地pkg软件包
apk add --allow-untrusted /path/to/foo.apk
如果有依赖包,就一起安装
apk add --allow-untrusted pkg1.apk pkg2.apk
同时安装多个软件
apk add nodejs npm yarn
卸载软件
/ # apk del curl
(1/6) Purging curl (7.61.1-r2)
(2/6) Purging libcurl (7.61.1-r2)
(3/6) Purging ca-certificates (20161130-r3)
Executing ca-certificates-20161130-r3.post-deinstall
(4/6) Purging libressl2.5-libssl (2.5.5-r2)
(5/6) Purging libssh2 (1.8.2-r0)
(6/6) Purging libressl2.5-libcrypto (2.5.5-r2)
Executing busybox-1.31.1-r9.trigger
OK: 6 MiB in 14 packages
apk使用帮助信息
/ # apk --help
apk-tools 2.10.4, 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.
基于Alpine定制带有curl的镜像
FROM alpine
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/main/" > /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/community/" >> /etc/apk/repositories
RUN ["apk","update"]
RUN ["apk","add","curl"]
# 默认是没有开启缓存的,所以装完也不用清缓存
alpine linux 安装包报错
WARNING: Ign解决办法
apk add gcc 时候报错
WARNING: Ignoring APKINDEX.167438ca.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.a2e6dac0.tar.gz: No such file or directory
ERROR: unsatisfiable constraints:
gcc (missing):
required by: world[gcc]
解决办法
apk update