Docker 构建支持中文环境的Alpine及大小优化

Docker 构建支持中文环境的Alpine及大小优化

因SpringBoot日志出现乱码,研究原因后发现是从docker官方仓库pull的镜像不支持中文。

构建内容参考了:https://www.clxz.top/2019/05/09/160241/

那就自己构建一个环境,本文只说构建Alpine及优化

1、Dockerfile如下:

FROM alpine:3.12.0

# 清理临时文件要在 同一个RUN命令内进行, rm -rf .....,构建的时候每个RUN都会创建一个临时的容器,只有写在同一个RUN下才会在一个容器内执行
RUN apk --no-cache add ca-certificates wget && \
    wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-2.25-r0.apk && \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-bin-2.25-r0.apk && \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-i18n-2.25-r0.apk && \
    apk add glibc-bin-2.25-r0.apk glibc-i18n-2.25-r0.apk glibc-2.25-r0.apk && \
    rm -rfv glibc-bin-2.25-r0.apk glibc-i18n-2.25-r0.apk glibc-2.25-r0.apk
# locale.md 见下面的内容
COPY ./locale.md /locale.md
RUN cat locale.md | xargs -i /usr/glibc-compat/bin/localedef -i {} -f UTF-8 {}.UTF-8 && \
    rm -rfv locale.md

ENV LANG=en_US.UTF-8 \
    LANGUAGE=en_US.UTF-8

精简后的locale.md,  只保留了en 、zh开头的, 不然构建的镜像比较大,将近大了80Mb

en_AG
en_AU
en_BW
en_CA
en_DK
en_GB
en_HK
en_IE
en_IN
en_NG
en_NZ
en_PH
en_SG
en_US
en_ZA
en_ZM
en_ZW
zh_CN
zh_HK
zh_SG
zh_TW
zu_ZA

清理临时文件内容片段:

RUN apk --no-cache add ca-certificate。。。 \
   。。。。
    rm -rfv glibc-bin-2.25-r0.apk glibc-i18n-2.25-r0.apk glibc-2.25-r0.apk

RUN cat locale.md | xargs -i 。。。&& \
    rm -rfv locale.md

2、构建命令:

docker build -t my-env/utf8-alpine:20.7.22.3 .

3、构建的过程:

Sending build context to Docker daemon  124.9MB
Step 1/5 : FROM alpine:3.12.0
---> a24bb4013296
Step 2/5 : RUN apk --no-cache add ca-certificates wget &&     wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub &&     wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-2.25-r0.apk &&     wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-bin-2.25-r0.apk &&     wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-i18n-2.25-r0.apk &&     apk add glibc-bin-2.25-r0.apk glibc-i18n-2.25-r0.apk glibc-2.25-r0.apk &&     rm -rfv glibc-bin-2.25-r0.apk glibc-i18n-2.25-r0.apk glibc-2.25-r0.apk
---> Running in 27530d5a8b80
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
(1/4) Installing ca-certificates (20191127-r4)
(2/4) Installing libunistring (0.9.10-r0)
(3/4) Installing libidn2 (2.3.0-r0)
(4/4) Installing wget (1.20.3-r1)
Executing busybox-1.31.1-r16.trigger
Executing ca-certificates-20191127-r4.trigger
OK: 8 MiB in 18 packages
--2020-07-22 09:11:56--  htt 。。。。
。。。。。 下载文件

fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
(1/4) Installing glibc (2.25-r0)
(2/4) Installing libgcc (9.3.0-r2)
(3/4) Installing glibc-bin (2.25-r0)
(4/4) Installing glibc-i18n (2.25-r0)
Executing glibc-bin-2.25-r0.trigger
OK: 25 MiB in 22 packages
removed 'glibc-bin-2.25-r0.apk'
removed 'glibc-i18n-2.25-r0.apk'
removed 'glibc-2.25-r0.apk'
Removing intermediate container 27530d5a8b80
---> 9927c6d3def0
Step 3/5 : COPY ./locale.md /locale.md
---> 37cc6234b3ab
Step 4/5 : RUN cat locale.md | xargs -i /usr/glibc-compat/bin/localedef -i {} -f UTF-8 {}.UTF-8
---> Running in 943755a1b6e2
Removing intermediate container 943755a1b6e2
---> c08ec601f5e2
Step 5/5 : ENV LANG=en_US.UTF-8     LANGUAGE=en_US.UTF-8
---> Running in 1983050bcf0a
Removing intermediate container 1983050bcf0a
---> 58488cb2f47b
Successfully built 58488cb2f47b
Successfully tagged my-env/utf8-alpine:20.7.22.2

4、查看构建后的文件结构

// 导出images
docker save my-env/utf8-alpine:20.7.22.3 > utf8-alpine_20.7.22.3.tar

解压后:
-
    - manifest.json
    - repositories
  - 99562d84c6129cf4268373af341e110e8984e12626951c19515f956da947ccc6.json
  - e56500c70e5e3b9b23b2e31880fdcb10ec2eb8b262609f8f0463bfa61916fd01     // 这个是alpine:3.12.0 的layer
    - layer.tar
    - json
    - VERSION
  - c234ab8959edd9715318124ad66fe080ea55c2d95a77e98613e2e98411874d96    // 安装glibc-2.25xxx 的 layer
    - layer.tar
    - json
    - VERSION
  - f3f134a63b698e4faf269116d0c3f12c76b6bee939fea010eceacd4d5404a00f    // locale.md 的layer
    - layer.tar
    - json
    - VERSION
  - 034a7ec19dfd3ab16e3f56e02bd4b9d816d390feee1da12194cacb1d546af577    // 根据local.md 生成的 locale 信息
    - layer.tar
    - json
    - VERSION

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当配置和优化Docker容器时,可以考虑以下几个方面: 1. 资源限制:为每个容器设置适当的资源限制,包括CPU、内存和磁盘空间。这可以通过Docker的`--cpu-shares`、`--memory`和`--storage-opt`参数来实现。 2. 容器镜像优化:选择轻量级的基础镜像,避免使用过大或过于复杂的镜像。可以使用Alpine Linux等精简的基础镜像,以减少容器的大小和启动时间。 3. 避免不必要的软件包:在构建容器时,只包含应用程序所需的最小软件包。避免安装不必要的依赖项,以减少容器的大小和复杂性。 4. 优化容器启动顺序:如果应用程序有多个组件,可以优化容器的启动顺序,确保先启动最重要的组件,以提高整体性能。 5. 使用缓存:在构建容器时,合理使用缓存机制。可以使用Docker的多阶段构建功能,将常用的步骤缓存起来,以加快构建速度。 6. 日志管理:合理配置容器的日志输出,避免过多的日志输出导致磁盘空间占用过大。可以将日志输出到标准输出或者专门的日志文件中,并定期清理不必要的日志。 7. 容器网络优化:根据实际需求,选择合适的网络模式。可以使用桥接网络、主机网络或者自定义网络,以满足应用程序的网络需求。 8. 安全性配置:确保容器的安全性,限制容器的权限和访问范围。可以使用Docker的安全配置选项,如`--security-opt`参数,限制容器的能力和访问权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值