Chuyển đến nội dung chính

Containerizing Web Apps trên Azure App Service

Trong bài viết này, mình sẽ hướng dẫn các bạn deploy web app trên Azure App Service sử dụng image. Trước tiên, chúng ta cần nhắc lại 1 số khái niệm: image, container, container registry, Azure App Service.

Khái niệm

Docker image: Một dạng tập hợp các file của ứng dụng, được tạo ra bởi Docker engine. Nội dung của các Docker image sẽ không bị thay đổi khi di chuyển. Docker image được dùng để chạy các Docker container. Do tính chất read-only của chúng, những images này đôi khi được gọi là snapshots.

Container: một dạng runtime của các Docker image, dùng để làm môi trường chạy ứng dụng.

Container Registry

Container Registry là dịch vụ lưu trữ tập trung cho các Docker image. Container Registry giúp bạn dễ dàng quản lý, chia sẻ và triển khai các image container.

Giả sử bạn có một ứng dụng web ASP.NET Core đơn giản. Bạn có thể sử dụng Docker để đóng gói ứng dụng này vào một image container. Sau đó, bạn có thể push image này lên Container Registry. Khi bạn muốn triển khai ứng dụng, bạn có thể pull image từ Container Registry và chạy nó trên bất kỳ server nào có cài đặt Docker.

Các loại Container Registry phổ biến:
  • Docker Hub: Docker Hub là public registry lớn nhất cho các Docker image. Bạn có thể tìm thấy hàng triệu image miễn phí trên Docker Hub.
  • Azure Container Registry: Azure Container Registry là dịch vụ Container Registry được cung cấp bởi Microsoft. Azure Container Registry cung cấp nhiều tính năng nâng cao, chẳng hạn như tích hợp với Azure DevOps và Azure Kubernetes Service.
  • Amazon Elastic Container Registry (ECR): Amazon ECR là dịch vụ Container Registry được cung cấp bởi Amazon Web Services (AWS). ECR cung cấp nhiều tính năng nâng cao, chẳng hạn như tích hợp với AWS Lambda và Amazon ECS.

Azure App Service là dịch vụ Platform as a Service (PaaS) được cung cấp bởi Microsoft. App Service giúp bạn dễ dàng triển khai và quản lý các ứng dụng web, API và mobile backend.

Cài đặt Extension cho Visual Studio Code

  1. Azure Tools
  2. Docker

Containerizing trên Docker Engine

Bạn tạo file Docker có nội dung như sau trong Visual Studio code

FROM mcr.microsoft.com/appsvc/dotnetcore:lts
ENV PORT 8080
EXPOSE 8080
ENV ASPNETCORE_URLS "http://*:${PORT}"
ENTRYPOINT ["dotnet", "/defaulthome/hostingstart/hostingstart.dll"]
Bạn có thể tham khảo Dockerfile cho các ngôn ngữ khác: https://learn.microsoft.com/en-us/azure/app-service/quickstart-custom-container?tabs=dotnet&pivots=container-linux-vscode

Build image và run container

docker build:latest -t demo -f Dockerfile .
docker run --name test -p 8080:8080 -d demo
Giải thích:
  • -d: run container ở chế độ background
  • -p: setup port từ internal port (docker) ra bên ngoài external port
Log
2024-01-27 21:22:34 Hosting environment: Production
2024-01-27 21:22:34 Content root path: /defaulthome/hostingstart/
2024-01-27 21:22:34 Now listening on: http://[::]:8080
2024-01-27 21:22:34 Application started. Press Ctrl+C to shut down.
2024-01-28 10:39:16 Hosting environment: Production
2024-01-28 10:39:16 Content root path: /defaulthome/hostingstart/
2024-01-28 10:39:16 Now listening on: http://[::]:8080
2024-01-28 10:39:16 Application started. Press Ctrl+C to shut down.

Deploy Web Apps trên Azure App Service

Build image bằng Visual Studio Code

Bấm F1, chọn Docker images: Build Image


Bạn có thể build bằng command docker build

Tạo Instance Azure Container Registry

Trên Azure Portal => Create a resource => Chọn Container Registries

Gõ Registry Name, ví dụ: nhatkyhoctap.azurecr.io

Sau khi tạo xong, bạn vào Container Registry => Settings => Access keys, sau đó enable Admin user. Bạn sẽ dùng settings này để deploy image lên App Service



Mở Visual Studio lên, chọn Terminal => Git Bash
$ docker login nhatkyhoctap.azurecr.io
Authenticating with existing credentials...
Login did not succeed, error: Error response from daemon: Get "https://whizregistry.azurecr.io/v2/": unauthorized: authentication required, visit https://aka.ms/acr/authorization for more information.
Username (nhatkyhoctap): nhatkyhoctap
Password:
Login Succeeded
Trong Visual Studio Code, nhấp chọn biểu tượng Docker, chọn image => Push
Executing task: docker image push nhatkyhoctap.azurecr.io/demo:latest 

The push refers to repository [nhatkyhoctap.azurecr.io/nhatkyhoctap]
7a6051a3589b: Preparing
a63d75c8cef3: Preparing

Nhận xét

  1. https://www.thorsten-hans.com/run-containers-in-azure-container-instances-straight-from-docker-cli/

    Trả lờiXóa

Đăng nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.