Tạo Dockerfile cho project ASP.NET Core, build và run Docker image

Bài này chúng ta sẽ cần cài đặt Visual Studio 2017 trở đi để hỗ trợ .NET Core tốt nhất. Sau đó chúng ta sẽ tạo một project với ASP.NET Core phiên bản mới stable nhất hiện tại là 2.2. Để có .NET Core thì các bạn cần cài đặt bản SDK của .NET core tại đây: https://dotnet.microsoft.com/download/dotnet-core

 

 

Bạn cần cài bản cho Windows hoặc Mac theo hệ điều hành bạn đang dùng, bản hiện tại mới nhất đang là 2.2.5. Download ở cột số 2 cho SDK nếu bạn cài môi trường phát triển, còn bản Runtime ở cột số 3 nếu bạn cần cài môi trường chạy cho nó ở trên Server.

Sau đó bạn cần cài Visual Studio tại đây: https://visualstudio.microsoft.com/ phiên bản hiện tại là 2019 preview rồi tuy nhiên bạn muốn download 2017 có thể download tại phần archives: https://visualstudio.microsoft.com/vs/older-downloads/

Bạn có thể nên dùng bản Professional vì chúng ta là developer. Dùng Community cũng được nhưng nó hơi bị ít tính năng hơn đó nha. Sau khi download cài đặt thì bạn nhớ check vào phần .NET Core web app nhé:

 

 

Ok đã xong, giờ hãy tạo một project ASP.NET Core nhé.

 

 

Sau đó chọn Project ASP.NET Core Web Application:

 

 

Điền tên của project ví dụ là “DockerImageSample” và chọn Location lưu mã nguồn của toàn bộ solution rồi click OK.

 

 

Bước tiếp chúng ta sẽ chọn template có sẵn, ở đây chúng ta chọn Web Application (Model-View-Controller) nhớ tích chọn Enable Docker Support nó sẽ tạo sẵn Docker File cho chúng ta. Cái này đòi hỏi cài Docker For Windows thfi chúng ta đã cài rồi. Tùy chọn HTTPS cho local mặc định. Chọn OS là cho Windows nhé. Nếu Linux các bạn chọn Linux.

 

 

Kết quả là chúng ta có một solution cùng tên với 1 project web bên trong, và nó đã có sẵn một Docker File.

Docker File là gì?

Như chúng ta đã biết Docker Image là bộ cài của toàn bộ ứng dụng và môi trường đi kèm với nó, vậy để tạo ra được bộ cài chúng ta cần có một tập lệnh chỉ dẫn Docker tạo bộ cài đó ra sao? Có những thành phần nào? Cái nào trước cái nào sau? DockerFile là một file chứa tập lệnh để tạo ra Docker Image. Vậy để tạo ra Docker Image thì chúng ta cần tự điều chỉnh DockerFile này. Chúng ta sẽ tìm hiểu cú pháp và các thành phần của nó ngay sau đây.

Vậy chúng ta sẽ làm gì nếu một solution trong thực tế có nhiều project, ở đây mỗi 1 project endpoint chính là nơi chúng ta cần build Docker. Có thể build Docker image trong các project library cũng được nhưng thông thường nó đặt ở project chính của ứng dụng.

Chúng ta sẽ thử tạo thêm một project nữa vào solution này nhé:

 

 

Chuột phải vào Solution Name và chọn Add à New Project. Sau đó chọn Class Library (.NET Core).

 

 

Sau khi tạo ra Project Library này, hãy Add reference nó vào project web chính

 

 

Vậy là hai project đã liên kết với nhau, tiếp theo chúng ta hãy xóa DockerFile mặc định trong Project Web đi và tạo mới Docker File:

 

 

Vậy chúng ta đã tạo ra một file DockerFile mới, nó tự động thêm lệnh Copy project Library vào khi build Docker Image:

 

 

Giải thích một chút về DockerFile này nhé:

  • Dòng 4: Chỉ ra tên image của .NET Core, image này là image tạo môi trường runtime cho .NET core, nó đóng vai trò là một image base.
  • Dòng 5: Chỉ ra thư mục làm việc bên trong image là thư mục app, cái này là thư mực bên trong Image nhé.
  • Dòng 6 và 7: Chỉ ra cổng mà khi container chạy image này sẽ mở cho bên ngoài chọc vào.
  • Dòng 9: Chỉ ra image .net core sdk dùng để build code ứng dụng.
  • Dòng 10: chỉ ra thư mục làm việc để build là thư mục src của image.
  • Dòng 11 và 12: Chính là 2 lệnh copy 2 files .csproj của 2 project trong solution vào 2 thư mục tương ứng trong thư mục app của image.
  • Dòng 13: Sau khi copy xong, nó sẽ run lệnh dotnet restore của .NET Core để download các package từ Nuget về phục vụ việc build.
  • Dòng 14: Copy toàn bộ file ở thư mục hiện tại sang thư mục src.
  • Dòng 15: Chuyển thư mục làm việc vào trong /src/DockerImageSample
  • Dòng 16: Chạy lệnh build project DockerImageSample.csproj với mode Release và output ra thư mục app của image.
  • Dòng 18: Khai báo image alias publish từ image build lúc trước.
  • Dòng 19: Publish project DockerImageSample.csproj và output ra thư mục app.
  • Dòng 22: Khai 22 chuyển thư mục làm việc về /app
  • Dòng 23: Copy toàn bộ image publish sang thư mục /app
  • Dòng 25: Tạo Entry point truy cập ứng dụng từ DockerImageSample.dll

Tạo Docker Image

Để tạo Docker image chúng ta cần lệnh build image thôi. Hãy mở PowerShell với chế độ Administrator nhé:

 

 

Chuyển thư mục làm việc sang thư mục chứa file Solution .sln:

 

 

Sau đó chạy lệnh: docker build -t dockersample -f DockerImageSample/Dockerfile . lệnh này có dấu . ở cuối cùng chỉ ra thư mục hiện tại. -t là option chỉ ra tên image, -f chỉ ra file Dockerfile. Tham khảo thêm các option tại đây https://docs.docker.com/engine/reference/commandline/build/

Sau khi enter chỉ cần đợi Image build xong bạn có thể kiểm tra danh sách image có sẵn bằng câu lệnh docker image ls. Lần đầu build bao giờ cũng lâu vì Docker phải download các image base của .NET Core về máy. Những lần sau sẽ nhanh hơn.

 

 

 

Run Docker Image với Docker Container

Để chạy một Docker image và tạo container các bạn sử dụng câu lệnh docker run -p 9000:80 dockersample. Cổng 9000 là cổng ngoài dùng chạy ứng dụng, còn cổng 80 là cổng bên trong Container expose ra ngoài theo cấu hình của Dockerfile. Cổng 9000 bên ngoài sẽ nối vào cổng trong để truy cập ứng dụng. Bạn có thể đổi cổng ngoài tùy theo ý thích của bạn. Còn cổng 80 bạn cũng có thể thay đổi trong Dockerfile theo ý mình.

 

Giờ bạn có thể chạy được ứng dụng từ localhost:9000

Bạn có thể push image local này lên Docker Hub để pull và run ứng dụng bất cứ máy nào chỉ bằng một lệnh duy nhất.

Tham khảo cách pull và push image lên Docker Hub tại đây: https://ropenscilabs.github.io/r-docker-tutorial/04-Dockerhub.html


Tác giả: Bạch Ngọc Toàn

Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.

Lên trên