I. Sử dụng Docker Image base có size nhỏ
Bạn có thể sử dụng alpine OS để có size nhỏ
FROM alpine
II. Chỉ cài đặt các package cần thiết để sử dụng
Không cài đặt các package hỗ trợ debug như là nano, vim, telnet, curl. Các lập trình viên có thể cài đặt on-demand khi họ cần
III. Tối ưu hoá từng layer
Thay vì sử dụng command trên từng layer, ta có thể gộp chung nhờ sự hỗ trợ của toán tử && của Linux. Thay vì
RUN apt-get update
RUN apt-get install -y nodejs
Có thể dùng
RUN apt-get update && apt-get install -y nodejs
IV. Không sử dụng cache trong lúc cài đặt các package
Repo cache có thể giúp tiết kiệm thời gian/bandwidth khi cài đặt lại các package, tuy nhiên quá trình này sẽ gây tăng dung lượng của Docker Image.
Ta có thể bỏ qua cache bằng cách
Với Ubuntu
RUN apt-get install -- no-install-recommends
Với Alpine
RUN apk add --no-cache
V. Xoá các repo sau khi hoàn thành quá trình cài đặt
Với Ubuntu
RUN rm -rf /var/lib/apt/lists/*
Với CentOS hoặc Redhat
RUN yum clean all
VI. Docker Image base theo mục đích sử dụng
VD ta có thể tách môi trường run-time & môi trường build
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
...
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
...
FROM build AS publish
RUN dotnet publish "ZDN.Web.Api.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENV ASPNETCORE_ENVIRONMENT=Internal
ENTRYPOINT ["dotnet", "ZDN.Web.Api.dll"]