0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Chi Tiết Tối Ưu Hóa Docker Image Qua Các Lệnh Trong Dockerfile

Đăng vào 1 tháng trước

• 3 phút đọc

Chủ đề:

Docker

Tối Ưu Hóa Docker Image: Hướng Dẫn Về Các Lệnh Trong Dockerfile

Dockerfile là tài liệu quan trọng giúp bạn xây dựng image Docker một cách hiệu quả. Bài viết này cung cấp hướng dẫn chi tiết về các lệnh cơ bản thường được sử dụng trong Dockerfile, cùng với các ví dụ cụ thể, cho phép bạn tạo ra những image Docker tối ưu và nhẹ nhàng hơn.

1. Lệnh FROM

Lệnh FROM luôn là lệnh đầu tiên trong Dockerfile. Nó xác định image cơ sở mà bạn muốn sử dụng để xây dựng image Docker của mình. Ví dụ:

Copy
FROM ubuntu:latest

Nếu bạn đang làm việc với Python, có thể sử dụng:

Copy
FROM python:3.9

2. Lệnh WORKDIR

Lệnh WORKDIR giúp bạn thiết lập thư mục làm việc bên trong container, đảm bảo rằng các lệnh sau (như COPY hoặc RUN) được thực hiện trong thư mục này.

Copy
WORKDIR /app

3. Lệnh COPY

Lệnh COPY dùng để sao chép file hoặc thư mục từ ngữ cảnh build vào trong container một cách nhanh chóng và đơn giản.

Copy
COPY src/ /app/

Hãy sử dụng COPY thay vì ADD khi không cần tải từ URL hoặc giải nén file.

4. Lệnh ADD

Khác với COPY, 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. Điều này mang lại sự linh hoạt cho bạn trong việc quản lý tài nguyên.

Copy
ADD myfile.tar.gz /app/

5. Lệnh RUN

Lệnh RUN thực thi các lệnh cần thiết trong quá trình build image, ví dụ như cài đặt phần mềm. Mỗi lệnh RUN tạo ra một layer image mới. Vì vậy, nên kết hợp các lệnh với nhau để giảm số lượng layer và tối ưu kích thước image.

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

6. Lệnh CMD

CMD chỉ định lệnh sẽ được thực thi khi container khởi động. Nếu có bất kỳ lệnh nào được cung cấp khi chạy docker run <image> <command>, lệnh mặc định sẽ bị ghi đè.

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

7. Lệnh ENTRYPOINT

ENTRYPOINT xác định ứng dụng hoặc lệnh chính sẽ chạy trong container. Nó thường được sử dụng khi bạn muốn container hoạt động như một file thực thi.

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

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

8. Lệnh ENV

Lệnh ENV dùng để thiết lập các biến môi trường bên trong container. Điều này rất hữu ích cho việc cấu hình ứng dụng.

Copy
ENV NODE_ENV=production

9. Lệnh EXPOSE

Lệnh EXPOSE khai báo cổng mà container đang lắng nghe. Tuy nhiên, để publish cổng, bạn cần sử dụng cờ -p trong câu lệnh docker run.

Copy
EXPOSE 8080

10. Lệnh LABEL

Lệnh LABEL cho phép bạn thêm metadata vào image, phục vụ cho việc mô tả, phiên bản hoặc thông tin người bảo trì.

Copy
LABEL maintainer="you@example.com"

11. Lệnh ARG

Lệnh ARG định nghĩa các biến có thời gian sống trong quá trình build, cho phép truy cập chúng bằng docker build --build-arg APP_VERSION=2.0.

Copy
ARG APP_VERSION=1.0

12. Lệnh 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.

Copy
VOLUME /data

13. Lệnh USER

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

Copy
USER appuser

14. Lệnh SHELL

Nếu bạn muốn tùy chỉnh shell sử dụng cho các lệnh RUN, hãy sử dụng lệnh SHELL.

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

15. Lệnh ONBUILD

Cuối cùng, lệnh ONBUILD cho phép bạn thiết lập trigger cho các image phụ thuộc, chỉ thực hiện khi image này được sử dụng làm base cho một Dockerfile khác.

Copy
ONBUILD RUN apt-get update

Tóm Tắt

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

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

Ví Dụ Về Dockerfile Hoàn Chỉnh

Copy
# Sử dụng Python làm base image
FROM python:3.9

# Thiết lập biến môi trường
ENV APP_HOME=/app

# Thiết lập thư mục làm việc
WORKDIR $APP_HOME

# Sao chép file ứng dụng
COPY . $APP_HOME

# Cài đặt dependencies
RUN pip install -r requirements.txt

# Khai báo cổng
EXPOSE 5000

# Thực thi ứng dụng
CMD ["python", "app.py"]

Hy vọng bài viết này sẽ giúp ích cho bạn trong việc tối ưu hóa Docker image một cách hiệu quả và dễ dàng hơn!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào