Topic 2 Question 21
4 mins read

Topic 2 Question 21


📌 Giải đề: Viết Dockerfile để chạy ứng dụng ASP.NET Core với setup script


1. Phân tích yêu cầu bài toán

Bạn cần viết một Dockerfile để triển khai ứng dụng ASP.NET Core ContosoApp.

  • Yêu cầu:
    Gọi setupScript.ps1 khi container được build.
    Chạy ContosoApp.dll khi container khởi động.
    Dockerfile phải được tạo trong cùng thư mục với ContosoApp.dllsetupScript.ps1.

Câu hỏi: Sắp xếp các lệnh trong Dockerfile theo đúng thứ tự để đảm bảo container hoạt động chính xác.


2. Phân tích các lệnh Dockerfile

Lệnh DockerfileChức năngCó sử dụng không?
FROM microsoft/aspnetcore:latestChọn image base (chứa .NET runtime)Chọn
WORKDIR /apps/ContosoAppĐặt thư mục làm việc trong containerChọn
COPY ./ .Sao chép toàn bộ file từ thư mục gốc vào containerChọn
RUN powershell ./setupScript.ps1Chạy script setup khi container buildChọn
CMD ["dotnet", "ContosoApp.dll"]Chạy ứng dụng khi container khởi độngChọn

3. Sắp xếp đúng thứ tự

1️⃣ Chọn image base .NET

FROM microsoft/aspnetcore:latest

Image chứa .NET runtime để chạy ứng dụng.

2️⃣ Đặt thư mục làm việc trong container

WORKDIR /apps/ContosoApp

Tạo thư mục làm việc cho ứng dụng.

3️⃣ Sao chép các file vào container

COPY ./ .

Sao chép toàn bộ file (gồm setupScript.ps1ContosoApp.dll) vào container.

4️⃣ Chạy script cài đặt

RUN powershell ./setupScript.ps1

Gọi script setup khi container được build.

5️⃣ Chạy ứng dụng khi container khởi động

CMD ["dotnet", "ContosoApp.dll"]

Chạy ContosoApp.dll khi container bắt đầu.


4. Đáp án chính xác

FROM microsoft/aspnetcore:latest
WORKDIR /apps/ContosoApp
COPY ./ .
RUN powershell ./setupScript.ps1
CMD ["dotnet", "ContosoApp.dll"]

🚀 Đây là cách viết Dockerfile đúng chuẩn để chạy ASP.NET Core với setup script! 🚀


📌 RUN hay CMD chạy trước trong Dockerfile?


1. Hiểu về RUNCMD trong Docker

📌 RUN

  • Chạy khi container được build (tại thời điểm tạo image).
  • Dùng để cài đặt dependencies, thiết lập môi trường.
  • Ví dụ: RUN powershell ./setupScript.ps1Script sẽ chạy trong quá trình build image.

📌 CMD

  • Chạy khi container được khởi động (runtime).
  • Dùng để xác định tiến trình chính của container.
  • Ví dụ: CMD ["dotnet", "ContosoApp.dll"]Lệnh này chỉ chạy khi container được khởi động từ image.

2. Câu hỏi: RUN hay CMD chạy trước?

Câu trả lời: RUN chạy trước CMD.

Giải thích:

  • RUN thực hiện các thiết lập cần thiết khi build image (cài đặt dependencies, chạy setup scripts, v.v.).
  • CMD chỉ chạy khi container được khởi động từ image đã build.

3. Kết luận

  • Nếu bạn cần thiết lập trước khi container chạy → Dùng RUN.
  • Nếu bạn cần chỉ định lệnh chính khi container chạy → Dùng CMD.

🚀 Vậy trong Dockerfile của bạn:

RUN powershell ./setupScript.ps1
CMD ["dotnet", "ContosoApp.dll"]

RUN chạy trước để thiết lập container
CMD chạy sau khi container khởi động.

Leave a Reply

Your email address will not be published. Required fields are marked *