- vừa được xem lúc

Tối ưu hóa Docker Image: Hướng dẫn chi tiết về các lệnh trong Dockerfile

0 0 1

Người đăng: Kubernetes

Theo Viblo Asia

Dockerfile là chìa khóa để xây dựng image Docker hiệu quả. Bài viết này cung cấp hướng dẫn toàn diện về các lệnh thường dùng trong Dockerfile, kèm theo ví dụ minh họa, giúp bạn tạo ra những image Docker tối ưu và tinh gọn.

1. FROM

Để bắt đầu, hãy tìm hiểu lệnh FROM, luôn là lệnh đầu tiên trong Dockerfile. Lệnh này xác định image cơ sở cho image Docker của bạn.

FROM ubuntu:latest

VD: FROM python:3.9 dành cho các dự án dựa trên Python.

2. WORKDIR

Tiếp theo là lệnh WORKDIR thiết lập thư mục làm việc bên trong container.

WORKDIR /app

Đảm bảo các lệnh tiếp theo (như COPY hoặc RUN) hoạt động trong thư mục này.

3. COPY

Lệnh COPY sao chép file hoặc thư mục từ ngữ cảnh build vào container.

COPY src/ /app/

Nó đơn giản và nhanh hơn ADD khi không cần giải nén hoặc tải xuống từ URL.

4. ADD

Ngược lại, lệnh ADD có khả năng tải xuống tài nguyên từ xa và tự động giải nén các file nén như .tar.gz, mang lại sự linh hoạt trong việc quản lý tài nguyên.

ADD myfile.tar.gz /app/

5. RUN

Lệnh RUN thực thi các lệnh trong quá trình build, chẳng hạn như cài đặt phần mềm.

RUN apt-get update && apt-get install -y curl

Mỗi lệnh RUN tạo ra một layer image mới. Kết hợp các lệnh với && giúp giảm thiểu số lượng layer, tối ưu kích thước image.

6. CMD

CMD chỉ định lệnh mặc định khi container khởi động, có thể bị ghi đè khi chạy docker run <image> <command>

CMD ["python", "app.py"]

7. ENTRYPOINT

Lệnh ENTRYPOINT xác định ứng dụng hoặc lệnh chính để chạy trong container, thường dùng cho container hoạt động như file thực thi.

ENTRYPOINT ["nginx", "-g", "daemon off;"]

Nó kết hợp với CMD để cung cấp các đối số mặc định.

8. ENV

ENV thiết lập biến môi trường, có thể được truy cập bên trong container, hữu ích cho việc cấu hình ứng dụng.

ENV NODE_ENV=production

9. EXPOSE

Lệnh EXPOSE khai báo cổng mà container đang listen on, nhưng không publish cổng, bạn cần dùng -p trong docker run

EXPOSE 8080

10. LABEL

LABEL thêm metadata vào image, dùng cho mô tả, phiên bản hoặc thông tin người bảo trì.

LABEL maintainer="you@example.com"

11. ARG

ARG định nghĩa biến thời gian build, được truyền trong quá trình build bằng docker build --build-arg APP_VERSION=2.0

ARG APP_VERSION=1.0

12. VOLUME

Lệnh VOLUME tạo điểm mount cho dữ liệu liên tục, đảm bảo thư mục tồn tại bên ngoài container.

VOLUME /data

13. USER

USER chỉ định người dùng để chạy các tiến trình container, tăng cường bảo mật bằng cách tránh quyền root.

USER appuser

14. SHELL

SHELL thay đổi shell được sử dụng trong các lệnh RUN, cho phép tùy chỉnh môi trường build.

SHELL ["/bin/bash", "-c"]

15. ONBUILD

ONBUILD thiết lập trigger cho các image phụ thuộc, chỉ thực thi khi image được dùng làm base cho Dockerfile khác.

ONBUILD RUN apt-get update

Tóm lại

Để xây dựng Dockerfile hiệu quả, hãy áp dụng các best practice:

  • Sử dụng Multi-Stage Builds để giảm kích thước image,
  • Tối thiểu hóa layer bằng cách kết hợp lệnh trong RUN,
  • Tận dụng .dockerignore để loại trừ file không cần thiết,
  • Sử dụng tag cho base image thay vì latest để đảm bảo tính nhất quán.

Ví dụ về Dockerfile hoàn chỉnh

# Use Python as the base image
FROM python:3.9 # Set environment variables
ENV APP_HOME=/app # Set the working directory
WORKDIR $APP_HOME # Copy application files
COPY . $APP_HOME # Install dependencies
RUN pip install -r requirements.txt # Expose the port
EXPOSE 5000 # Run the application
CMD ["python", "app.py"]

Hy vọng bài viết này hữu ích đối với các bạn!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 409

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 100

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 104

- vừa được xem lúc

Docker - những kiến thức cơ bản phần 1

Giới thiệu. Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker.

0 0 78

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 67

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 127