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