欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

使用 alpine 打包镜像注意事项

发布时间:2023/11/28 66 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用 alpine 打包镜像注意事项 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Alpine Linux 是一个相当精简的操作系统,而基于它的 Docker 镜像可以仅有数 MB 的尺寸。如果软件基于这样的系统镜像之上构建而得,可以想象新的镜像也是十分小巧的。

由于基于 Alpine 系统建立的软件镜像远远小于基于其他系统的软件镜像,它在网络传输上的优势尤为明显。如果我们选择这类的镜像,不但可以节约网络传输的时间,也能减少镜像对硬盘空间的占用。

当然,有优点也会有缺点,Alpine 镜像的缺点就在于它实在过于精简,以至于麻雀虽小,也无法做到五脏俱全了。

Alpine 中缺少很多常见的工具和类库,以至于如果我们想基于软件 Alpine 标签的镜像进行二次构建,那搭建的过程会相当烦琐。所以如果你想要对软件镜像进行改造,并基于其构建新的镜像,那么 Alpine 镜像不是一个很好的选择 (这时候我们更提倡基于 UbuntuDebianCentOS 这类相对完整的系统镜像来构建)。

1. 没有内置 HTTPS 证书

有可能你的程序里面需要像外部发送网络请求,打包后镜像在发送网络请求时会报下面的这个错:

x509: certificate signed by unknown authority

这是因为 alpine 镜像没有内置 HTTPS 证书,所以需要在打包时安装下证书。

调整后可以这样写:

FROM alpine:latestRUN apk update \&& apk upgrade \&& apk add --no-cache \ca-certificates \&& update-ca-certificates 2>/dev/null || trueWORKDIR /appCOPY ./build/app_linux /app/appENTRYPOINT ["/app/app"]

2. 时区问题

在 Docker 镜像里面可以安装 tzdata 这个包,然后设置 TZ 环境变量就好了。再次调整 Dockerfile,变成这样:

FROM alpine:latestRUN apk update \&& apk upgrade \&& apk add --no-cache \ca-certificates \tzdata \&& update-ca-certificates 2>/dev/null || true# 设置默认时区为上海
ENV TZ Asia/ShanghaiWORKDIR /appCOPY ./build/app_linux /app/appENTRYPOINT ["/app/app"]

更多关于 Alpine 介绍 https://yeasy.gitbook.io/docker_practice/os/alpine

不要轻易使用 Alpine 镜像来构建 Docker 镜像,有坑!

3. 指定版本

FROM golang:1.15-alpine3.12
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.cloud.tencent.com/g' /etc/apk/repositories
RUN apk add alpine-sdk
RUN go env -w GOPROXY=https://goproxy.cn,direct
# RUN go get -u github.com/cosmtrek/air  # 它是用来实现热重载的

总结

以上是生活随笔为你收集整理的使用 alpine 打包镜像注意事项的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。