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
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
- Azure Tools
- 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-vscodeBuild 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
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
$ 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
https://www.thorsten-hans.com/run-containers-in-azure-container-instances-straight-from-docker-cli/
Trả lờiXóa