laijunfeng 2020-04-07
根据基础镜像不同添加的命令也不同
对于alpine,比如mcr.azk8s.cn/dotnet/core/aspnet:3.1-alpine是以alpine为基础镜像的,alpine是最小系统镜像,所以用这个做基础镜像能将镜像整体大小控制的得很小。
alpine的包管理器是apk,安装软件命令是apk add
RUN sed -i "://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" repositories && apk --no-cache add tzdata zeromq && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo ‘Asia/Shanghai‘ > /etc/timezone
第一行是替换软件源为华为云镜像源
第二行是安装tzdata和zeromq
第三行是软链接上海时区到/etc/localtime
第四行是写入上海到/etc/timezone
安装libgdi+
RUN sed -i "://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" /etc/apk/repositories && \ apk --no-cache add terminus-font tzdata zeromq && apk --no-cache add libgdiplus --update-cache --repository ‘https://mirrors.huaweicloud.com/alpine/edge/testing/‘ --allow-untrusted && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo ‘Asia/Shanghai‘ > /etc/timezone && ln -s /usr/lib/libgdiplus.so.0.0.0 /usr/lib/libgdiplus.so
和上边不同的多了第三行和最后一行
第三行是安装libgdi+ 由于libgdi+在alpine的软件源里是属于测试版的,所以要指定仓库来源为华为云的测试版软件源
最后一行,软连接libgdiplus.so.0.0.0 为libgdiplus.so
安装了libgdi+和修改时区的完整Dockerfile
FROM mcr.azk8s.cn/dotnet/core/aspnet:3.1-alpine AS base WORKDIR /app EXPOSE 80 COPY . . RUN sed -i "://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" /etc/apk/repositories && \ apk --no-cache add terminus-font tzdata zeromq && apk --no-cache add libgdiplus --update-cache --repository ‘https://mirrors.huaweicloud.com/alpine/edge/testing/‘ --allow-untrusted && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo ‘Asia/Shanghai‘ > /etc/timezone && ln -s /usr/lib/libgdiplus.so.0.0.0 /usr/lib/libgdiplus.so ENTRYPOINT ["dotnet", "MyHost.dll"]
仅修改时区的Dockerfile
FROM mcr.azk8s.cn/dotnet/core/aspnet:3.1-alpine AS base WORKDIR /app EXPOSE 80 7 COPY . .18 RUN sed -i "://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" repositories 19 && apk --no-cache add tzdata zeromq 20 && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 21 && echo ‘Asia/Shanghai‘ > /etc/timezone ENTRYPOINT ["dotnet", "MarketingManagement.HttpApi.Host.dll"]
.net core的默认基础镜像是debian,包管理器是apt,和ubuntu一致
直接上完整dockerfile
安装libgdi+ 修改时区版
FROM mcr.azk8s.cn/dotnet/core/aspnet:3.1 AS base WORKDIR /app EXPOSE 80 COPY . . #设置时区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone#安装libgdi+ RUN ln -s /lib/x86_64-linux-gnu/libdl-2.24.so /lib/x86_64-linux-gnu/libdl.so RUN sed -i "://://" /etc/apt/sources.list && sed -i "://://" /etc/apt/sources.list && apt-get update && apt-get install -y --allow-unauthenticated apt-utils libgdiplus nano && rm -rf /var/lib/apt/lists/* ENTRYPOINT ["dotnet", "MyHost.dll"]
因为需要更新软件包列表,整体大小也比alpine大很多,所以构建速度明显比alpine慢很多