alpine 镜像常见操作
alpine 只有 5mb 的身材让人佩服,同时又具备很强的安全性,除了预装的软件,我们还可以基于 alpine 安装需要的软件。
1. alpine 镜像安装软件
比如期望基于 alpine 镜像安装 jq
软件。
FROM alpine:3.14.2
RUN apk add --update jq && rm -rf /var/cache/apk/*
1
2
2
2. 使用 alpine-glibc 镜像
执行二进制提示 二进制 not found,比如
/bin/sh: dog: not found
最后排查是因为默认 alpine 镜像中缺少 GLIBC 库
,而是 MUSL LIBC
库
该二进制文件是使用动态链接方式编译了一个使用了 GLIBC 库的程序生成的
有两种方法解决
2.1 直接使用 alpine-glibc 镜像
# docker pull jeanblanchard/alpine-glibc
1
据图可以查看对应开源项目:构建 alpine-glibc 镜像open in new window
FROM alpine:3.14.2
MAINTAINER Jean Blanchard <jean@blanchard.io>
ENV GLIBC_VERSION 2.34-r0
# Download and install glibc
RUN apk add --update curl && \
curl -Lo /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
curl -Lo glibc.apk "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk" && \
curl -Lo glibc-bin.apk "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk" && \
apk add glibc-bin.apk glibc.apk && \
/usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib && \
echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf && \
apk del curl && \
rm -rf glibc.apk glibc-bin.apk /var/cache/apk/*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2.2 编译时使用静态编译
如果你是代码构建者,可以改为静态编译,不要依赖 GLIBC ,比如编译 Go 程序的时候指定 CGO_ENABLED=0