Deploy ứng dụng ASP.NET Core bằng Docker
Tại sao nên sử dụng ASP.NET Core?
- Mã nguồn mở.
- Phát triển và chạy các ứng dụng ASP.NET Core đa nền tảng trên Windows, MacOS và Linux.
- Rất tốt cho các ứng dụng dựa trên đám mây hiện đại, chẳng hạn như ứng dụng web, ứng dụng IoT và backend cho ứng dụng di động.
- Các ứng dụng ASP.NET Core có thể chạy trên .NET Core hoặc trên .NET Framework đầy đủ.
- Được thiết kế để cung cấp một khung phát triển được tối ưu hóa cho các ứng dụng được triển khai trên đám mây hoặc chạy tại chỗ
- Các thành phần mô-đun tạo được tính linh hoạt trong khi xây dựng các giải pháp của bạn
Điều kiện tiên quyết
Ví dụ này giả sử bạn đã có ứng dụng ASP.NET Core trên máy của mình. Nếu bạn chưa quen với ASP.NET, bạn có thể làm theo một hướng dẫn đơn giản để khởi tạo một dự án hoặc sao chép ví dụ ASP.NET Docker của chúng tôi.
Tạo Dockerfile cho ứng dụng ASP.NET Core
Phương pháp 1
- Tạo một file
Dockerfile
trong thư mục dự án của bạn. - Thêm nội dung bên dưới vào file
Dockerfile
của bạn cho container Linux hoặc Windows. Các thẻ bên dưới có nghĩa là chúng kéo container Windows hoặc Linux tùy thuộc vào chế độ nào được thiết lập trong Docker Desktop cho Windows. Đọc thêm về chuyển đổi container. - File
Dockerfile
giả định rằng ứng dụng của bạn có tên làaspnetapp
. Bạn hãy cập nhật fileDockerfile
để sử dụng tên file DLL trong dự án của bạn.
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Lưu ý: Để làm cho image của bạn càng nhỏ càng tốt, hãy thêm file
.dockerignore
vào thư mục dự án của bạn và sao chép phần dưới đây vào đó.
bin/
obj/
Dockerfile
trên sử dụng phương pháp tạo image nhiều bước để image có kích thước nhỏ. Để tìm hiểu về phương pháp tạo image nhiều bước, bạn có thể tham khảo mục “Cách tối ưu hóa Docker Image” ở hướng dẫn sau:
Phương pháp 2: xây dựng ứng dụng bên ngoài container Docker
- Tạo một file
Dockerfile
trong thư mục dự án của bạn. - Thêm nội dung bên dưới vào file
Dockerfile
của bạn cho container Linux hoặc Windows. Các thẻ bên dưới có nghĩa là chúng kéo container Windows hoặc Linux tùy thuộc vào chế độ nào được thiết lập trong Docker Desktop cho Windows. Đọc thêm về chuyển đổi container. - File
Dockerfile
giả định rằng ứng dụng của bạn có tên làaspnetapp
. Bạn hãy cập nhật fileDockerfile
để sử dụng tên file DLL trong dự án của bạn.
Phương pháp này giả định rằng dự án của bạn đã được publish sẵn và nó sao chép ứng dụng từ thư mục publish. Tham khảo tài liệu của Microsoft về container hóa ứng dụng .Net Core.
Các bước docker build
ở đây sẽ nhanh hơn nhiều so với phương pháp 1, vì tất cả mọi thứ đã được xây dựng bên ngoài của các bước docker build
và kích thước của image gốc được nhỏ hơn nhiều so với image xây dựng thông thường.
Phương pháp này được ưu tiên cho các công cụ CI như Jenkins, Azure DevOps, GitLab CI, v.v. vì bạn có thể sử dụng ứng dụng đã được publish trong nhiều mô hình triển khai nếu Docker không phải là mô hình triển khai duy nhất đang được sử dụng.
Ngoài ra, bạn sẽ có thể chạy các bài kiểm tra unit test và xuất bản các báo cáo về mức độ mã hoặc sử dụng các plugin tùy chỉnh trên các thành phần được publish bởi CI.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
COPY bin/Release/netcoreapp3.1/publish/ App/
WORKDIR /App
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Lưu ý: Để làm cho image của bạn càng nhỏ càng tốt, hãy thêm file
.dockerignore
vào thư mục dự án của bạn và sao chép phần dưới đây vào đó.
bin/
obj/
Xây dựng và chạy Docker Image
- Mở terminal và điều hướng đến thư mục dự án của bạn.
- Sử dụng các lệnh sau để xây dựng và chạy hình ảnh Docker của bạn:
docker build --tag aspnetapp:prod .
docker run --detach --publish 8080:80 --name myapp aspnetapp:prod
Xem trang web đang chạy từ một container
- Bạn gõ địa chỉ http://localhost:8080 vào trình duyệt để truy cập ứng dụng của bạn.
- Nếu bạn đang sử dụng Nano Windows Container và chưa cập nhật lên Windows Creator Update, sẽ có một lỗi ảnh hưởng đến cách Windows 10 giao tiếp với Container thông qua “NAT” (Dịch địa chỉ mạng). Bạn phải nhập trực tiếp IP của container thay vì localhost để truy cập ứng dụng. Bạn có thể lấy địa chỉ IP của container bằng các bước sau:
- Chạy lệnh
docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" myapp
- Sao chép địa chỉ IP của container và dán vào trình duyệt của bạn. (Ví dụ,
172.16.240.197
)