Tuyển dụng
Viettel IDC

Làm sao giảm size Docker image? Cách tối ưu Docker image hiệu quả

03/06/2026

Một file cấu hình nặng hàng Gigabyte không chỉ vắt kiệt ngân sách máy chủ đám mây mà còn kéo lùi toàn bộ tốc độ triển khai dự án của bạn. Nếu bạn đang loay hoay tìm đáp án cho bài toán làm sao giảm size Docker image mà không làm hỏng cấu trúc ứng dụng hiện tại, Viettel IDC sẽ hướng dẫn chi tiết trong bài viết sau.

Tại sao cần phải giảm dung lượng Docker image?

Khi làm việc với Docker, nhiều người thường chỉ quan tâm đến việc ứng dụng chạy thành công mà quên mất khâu kiểm soát dung lượng. Một image cồng kềnh lên tới hàng Gigabyte không chỉ làm giảm hiệu suất hệ thống mà còn gây ra nhiều rắc rối khi vận hành thực tế. Dưới đây là 4 lý do cốt lõi giải thích tại sao bạn cần giảm dung lượng Docker image ngay lập tức:

- Tăng tốc độ triển khai: Image nhẹ giúp rút ngắn thời gian tải lên và kéo về máy chủ, làm cho toàn bộ quy trình tự động hóa diễn ra nhanh chóng hơn.

- Tiết kiệm chi phí hạ tầng: Kích thước đóng gói nhỏ giúp doanh nghiệp cắt giảm đáng kể tiền thuê dung lượng lưu trữ và băng thông truyền tải dữ liệu hàng tháng.

- Tăng cường tính bảo mật: Lược bỏ các thư viện và công cụ dư thừa sẽ thu hẹp phạm vi tấn công, ngăn chặn nguy cơ bị kẻ xấu lợi dụng hệ thống.

- Cải thiện tốc độ khởi động: Một ứng dụng có dung lượng nhỏ sẽ khởi chạy gần như ngay lập tức để kịp thời phục vụ người dùng khi hệ thống cần mở rộng đột ngột.

Tại sao cần phải giảm dung lượng Docker image?

Cách kiểm tra và phân tích dung lượng Docker image hiện tại 

Sử dụng các lệnh Docker có sẵn

Đây là cách nhanh nhất vì bạn không cần cài đặt thêm bất kỳ phần mềm bên thứ ba nào. Để xem dung lượng tổng thể của tất cả các image đang có trên máy, chỉ cần mở terminal và sử dụng hai lệnh sau:

- Lệnh docker images: Hiển thị dung lượng tổng thể của các image đang có trên máy.

- Lệnh docker history <tên_image>: Liệt kê kích thước chi tiết của từng lớp (layer), giúp bạn phát hiện dòng lệnh nào trong Dockerfile gây nặng nhất.

Phân tích chuyên sâu với công cụ Dive

Nếu lệnh mặc định của Docker chỉ cho bạn một cái nhìn tổng quan, Dive là một công cụ mã nguồn mở tuyệt vời giúp bạn mổ xẻ chi tiết đến từng tệp tin. Các kỹ sư DevOps rất ưa chuộng công cụ này vì giao diện trực quan và tính năng phân tích mạnh mẽ.

Sau khi cài đặt Dive, bạn chỉ cần chạy lệnh dive <tên_image>. Giao diện sẽ hiển thị rõ cấu trúc thư mục, bôi màu các tệp tin bị thay đổi qua từng layer và tính toán chính xác mức độ dung lượng đang bị lãng phí.

Làm sao giảm size Docker image? 6 cách tối ưu hóa Docker image hiệu quả

Thu nhỏ Docker image là bước kỹ thuật tiếp theo bạn cần thực hiện sau khi đã kiểm tra xong tình trạng của hệ thống. Những phương pháp thực chiến dưới đây sẽ giúp Giảm dung lượng Docker image một cách an toàn mà không làm gián đoạn quá trình vận hành của ứng dụng.

1. Sử dụng Base Image nhỏ gọn (Alpine hoặc Slim)

Base image là nền tảng của mọi container. Nếu bạn chọn một image chứa nguyên một hệ điều hành đầy đủ như Ubuntu, dung lượng khởi điểm đã lên tới hơn 100MB. Thay vào đó, hãy sử dụng các phiên bản rút gọn như Alpine Linux (chỉ khoảng 5MB) hoặc các bản Slim.

Chưa tối ưu (Nặng ~1GB):

FROM node:18

WORKDIR /app

COPY . .

RUN npm install

CMD ["node", "app.js"]

Đã tối ưu (Chỉ còn ~150MB):

FROM node:18-alpine

WORKDIR /app

COPY . .

RUN npm install

CMD ["node", "app.js"]

2. Thiết lập file .dockerignore chuẩn xác

Khi chạy lệnh build, Docker sẽ gửi toàn bộ thư mục hiện tại (context) cho Docker Daemon. Nếu không có file .dockerignore, bạn sẽ vô tình bê nguyên các thư mục nặng và không cần thiết như node_modules, thư mục .git hay các file log vào trong image.

Mẫu file .dockerignore tiêu chuẩn

Plaintext

.git

.gitignore

node_modules/

npm-debug.log

Dockerfile

.dockerignore

.env

3. Áp dụng kỹ thuật Multi-stage Builds 

Đây là một trong những phương pháp giảm size Docker image hiệu quả. Multi-stage builds cho phép bạn sử dụng một image nặng, đầy đủ công cụ để biên dịch (build) mã nguồn. Sau đó, bạn chỉ copy tệp tin thực thi cuối cùng sang một image trống trơn (hoặc siêu nhẹ) để chạy thực tế (runtime).

Ví dụ với ngôn ngữ Golang:

Dockerfile

# Giai đoạn 1: Build (Dùng image nặng có sẵn bộ biên dịch)

FROM golang:1.20 AS builder

WORKDIR /app

COPY . .

RUN go build -o main .

 

# Giai đoạn 2: Runtime (Dùng image cực nhẹ chỉ để chạy app)

FROM alpine:latest

WORKDIR /root/

# Chỉ copy file thực thi 'main' từ giai đoạn 1 sang

COPY --from=builder /app/main .

CMD ["./main"]

Kết quả: Image giảm từ hơn 800MB xuống chỉ còn dưới 20MB.

4. Gộp các lệnh RUN để giảm bớt số lượng Layer

Bản chất của Docker là xây dựng image dựa trên cơ chế xếp lớp (layer). Cụ thể, mỗi khi bạn khai báo một dòng lệnh như RUN, COPY hoặc ADD trong Dockerfile, hệ thống sẽ tự động sinh ra một lớp dữ liệu mới xếp chồng lên các lớp trước đó. Việc viết quá nhiều câu lệnh rời rạc sẽ khiến số lượng layer tăng vọt, kéo theo tổng dung lượng của file đóng gói phình to một cách không cần thiết. Để khắc phục triệt để vấn đề này, thay vì tách dòng, bạn hãy khéo léo gom các lệnh cài đặt có liên quan lại với nhau thành một chuỗi duy nhất bằng cách sử dụng toán tử && kết hợp với dấu \.

Chưa tối ưu (Tạo ra 3 layer):

Dockerfile

RUN apt-get update

RUN apt-get install -y python3

RUN apt-get install -y python3-pip

 

Đã tối ưu (Chỉ tạo 1 layer duy nhất):

Dockerfile

RUN apt-get update && \

    apt-get install -y python3 python3-pip

5. Dọn dẹp bộ nhớ tạm (Cache) ngay trong cùng Layer

Một sai lầm phổ biến là lập trình viên chạy lệnh cài đặt ở dòng trên, rồi xuống dòng dưới mới chạy lệnh xóa cache. Do cơ chế lưu lớp của Docker, rác ở lớp trên vẫn tồn tại trong file đóng gói cuối cùng. Bạn phải xóa cache ngay lập tức trong cùng một lệnh RUN.

Ví dụ chuẩn trên Ubuntu/Debian:

Dockerfile

RUN apt-get update && \

    apt-get install -y curl && \

    apt-get clean && \

    rm -rf /var/lib/apt/lists/*

 

Ví dụ chuẩn với Node.js:

Dockerfile

RUN npm install && npm cache clean --force

6. Sử dụng Distroless Images cho môi trường Production

Nếu Alpine vẫn chưa đủ an toàn, hãy dùng Distroless do Google phát triển. Đây là các image bị tước bỏ hoàn toàn hệ điều hành, shell (như bash/sh), và trình quản lý gói (như apt/apk). Nó chỉ chứa đúng môi trường chạy (runtime) cho ngôn ngữ của bạn. Không có shell đồng nghĩa với việc hacker không thể gõ lệnh để chọc phá hệ thống dù có xâm nhập được.

Ví dụ Distroless với Node.js:

Dockerfile

FROM gcr.io/distroless/nodejs20-debian11

WORKDIR /app

COPY --from=builder /app /app

CMD ["app.js"]

Ngay cả khi image đã được tối ưu dung lượng, việc tải dữ liệu từ các kho lưu trữ quốc tế về máy chủ tại Việt Nam đôi khi vẫn gặp độ trễ do giới hạn đường truyền. Để khắc phục tình trạng này, bạn có thể cân nhắc sử dụng các kho lưu trữ nội địa như dịch vụ Viettel Container Registry (vCR). Với lợi thế hạ tầng máy chủ đặt trong nước, vCR giúp quá trình push) và pull image diễn ra nhanh chóng và ổn định hơn so với các nền tảng quốc tế.

Kết luận

Hy vọng với 6 phương pháp thực chiến vừa hướng dẫn, bạn đã nắm rõ làm sao giảm size Docker image phù hợp nhất với ngôn ngữ lập trình của dự án. Tối ưu hóa cấu hình đóng gói không tốn quá nhiều thời gian nhưng lại mang đến lợi ích khổng lồ về cả hiệu năng, chi phí lẫn tính bảo mật cho hệ thống. 

Để được hỗ trợ tư vấn và tìm hiểu các dịch vụ của Viettel, bạn có thể liên hệ trực tiếp tới Viettel IDC qua các kênh:

- Hotline: 1800 8088 (miễn phí cước gọi)

- Fanpage: https://www.facebook.com/viettelidc  

Bình luận ()

Đăng nhập | Đăng ký
để gửi bình luận
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Xem thêm bình luận

Tin liên quan

29/09/2026

"SOVEREIGN CLOUD" VÀ NGHỊCH LÝ CHUYỂN ĐỔI SỐ: GIẢI MÃ BÀI TOÁN TUÂN THỦ CHO NGÀNH TÀI CHÍNH & CHÍNH PHỦ

Các tổ chức thuộc nhóm ngành trọng yếu như tài chính, ngân hàng (BFSI) và cơ quan nhà nước đang khao khát hiện đại hóa hệ thống IT (chuyển đổi sang kiến trúc Microservices, sử dụng Container/Kubernetes) để tăng tốc độ triển khai dịch vụ và nâng cao trải nghiệm người dùng. Tuy nhiên, họ lại đang vấp phải một "nghịch lý" lớn: Càng muốn áp dụng công nghệ Cloud hiện đại, rào cản về tuân thủ pháp lý và an toàn thông tin càng trở nên khắt khe.

29/09/2026

BÀI TOÁN "NOISY NEIGHBOR" TRÊN CLOUD VÀ CHIẾN LƯỢC TỐI ƯU HIỆU NĂNG CHO HỆ THỐNG CỐT LÕI

Trong kỷ nguyên mà dữ liệu là "dầu mỏ mới", việc vận hành các hệ thống xương sống (Core ERP, Core Banking) hay các workload tính toán chuyên sâu (AI, Machine Learning, Datalake) đòi hỏi năng lực phần cứng vô cùng mạnh mẽ.

27/09/2026

"BÃO GIÁ" HẠ TẦNG CNTT VÀ BÀI TOÁN SỐNG CÒN CỦA DOANH NGHIỆP: VÌ SAO PRIVATE CLOUD DẠNG DỊCH VỤ LÊN NGÔI?

Làn sóng bùng nổ hạ tầng AI toàn cầu đang tạo ra một "cơn địa chấn" về giá phần cứng máy chủ, chip nhớ DRAM, ổ cứng doanh nghiệp và chi phí năng lượng. Đứng trước áp lực phải chuyển đổi số nhưng lại vấp phải bài toán chi phí đầu tư (CapEx) đắt đỏ cùng thời gian giao hàng kéo dài hàng tháng, các nhà quản trị công nghệ (CIO) và tài chính (CFO) đang tìm kiếm một hướng đi mới: Không cần bỏ hàng tỷ đồng mua sắm hạ tầng mà vẫn sở hữu riêng một hệ thống Private Cloud hoàn chỉnh, an toàn và sẵn sàng vận hành ngay lập tức.

29/09/2026

Digital Workplace là gì? Xu hướng môi trường làm việc số cho doanh nghiệp

Digital Workplace là gì? Khám phá mô hình vận hành, thành phần, lợi ích, ứng dụng, thách thức và xu hướng môi trường làm việc số cho doanh nghiệp.

29/09/2026

Lỗ hổng Shellshock là gì? Cơ chế, tác động và cách khắc phục

Lỗ hổng Shellshock (CVE-2014-6271) trong Bash là gì, vì sao nghiêm trọng? Tìm hiểu nguyên nhân, hệ thống bị ảnh hưởng và cách kiểm tra, vá lỗi.

29/09/2026

Scratch là gì? Cách hoạt động, ứng dụng và đối tượng phù hợp

Scratch là gì? Tìm hiểu cách lập trình bằng khối lệnh, các khái niệm có thể học, ứng dụng thực tế và sự khác nhau giữa Scratch với ScratchJr.

29/09/2026

Phân biệt các loại Web Hosting: Đâu là lựa chọn phù hợp cho website?

Phân biệt các loại Web Hosting và tìm hiểu cách mỗi mô hình hoạt động, từ đó lựa chọn giải pháp phù hợp với nhu cầu, quy mô và định hướng phát triển website.

29/09/2026

Website có cần hosting không? Giải đáp chi tiết từ A-Z

Website có cần hosting không? Tìm hiểu vai trò của hosting, domain và các trường hợp cần và không cần mua hosting riêng cho website.

29/09/2026

Top nhà cung cấp dịch vụ Cloud Camera uy tín tại Việt Nam

Top nhà cung cấp dịch vụ Cloud Camera uy tín tại Việt Nam, cùng tiêu chí lựa chọn và những lưu ý quan trọng trước khi đăng ký dịch vụ.

28/09/2026

Trigger là gì trong DBMS? Cách hoạt động, các loại phổ biến và ứng dụng

Trigger là gì trong DBMS? Tìm hiểu cách trigger hoạt động, các loại phổ biến, ví dụ minh họa, ưu nhược điểm và khi nào nên sử dụng.