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

  1. Tạo một file Dockerfile trong thư mục dự án của bạn.
  2. 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.
  3. 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 file Dockerfile để 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:

Sổ tay Docker: Thao tác Docker Image cơ bản
Trong hướng dẫn này, bạn sẽ tìm hiểu các thao tác Docker Image cơ bản như: tạo image, xem danh sách image, xóa image, tối ưu image, hiểu về các lớp của image, ...

Phương pháp 2: xây dựng ứng dụng bên ngoài container Docker

  1. Tạo một file Dockerfile trong thư mục dự án của bạn.
  2. 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.
  3. 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 file Dockerfile để 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

  1. Mở terminal và điều hướng đến thư mục dự án của bạn.
  2. 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:
  1. Chạy lệnh docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" myapp
  2. 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)
DockerDevOpsASP.NET Core MVCASP.NET Core
Bài Viết Liên Quan:
Sổ tay Docker: Cách sử dụng Docker Compose
Trung Nguyen 20/03/2021
Sổ tay Docker: Cách sử dụng Docker Compose

Trong hướng dẫn này, bạn sẽ tìm hiểu các kiến thức cơ bản về Docker Compose, cách chạy và quản lý các dịch vụ sử dụng Docker Compose.

Sổ tay Docker: Cách chạy ứng dụng JavaScript trên nhiều Container
Trung Nguyen 20/03/2021
Sổ tay Docker: Cách chạy ứng dụng JavaScript trên nhiều Container

Trong hướng dẫn này, bạn sẽ học cách triển khai ứng dụng trên nhiều container trong Docker.

Sổ tay Docker: Thao tác Docker Network cơ bản
Trung Nguyen 19/03/2021
Sổ tay Docker: Thao tác Docker Network cơ bản

Bạn sẽ tìm hiểu các kiến thức cơ bản về Docker Network, các thao tác mạng cơ bản như: tạo và xóa mạng, gắn container vào mạng, gỡ container khỏi mạng.

Sổ tay Docker: Cách xây dựng ứng dụng JavaScript với Docker
Trung Nguyen 19/03/2021
Sổ tay Docker: Cách xây dựng ứng dụng JavaScript với Docker

Trong hướng dẫn này, bạn sẽ học cách xây dựng ứng dụng JavaScript với Docker. Tạo image cho ứng dụng, tối ưu image, chạy container, ...