Kỹ thuật tối ưu hoá Docker Image

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"]

 

 

Bài viết liên quan