文章出處

最近在學習如何用 Docker 部署生產環境中的 ASP.NET Core 站點,作為一個 Docer 新手,從何處下手更容易入門呢?一開始就手寫 Docker 配置文件(Docfile, docker-compose.yml)容易讓人產生挫敗感,想到 Visual Studio 2017 對 Docker 的支持(Docker Support),也許借助它自動生成Docker配置文件、初步體驗一下 Docker 部署是一個入門捷徑,遂據此想法嘗試了一下,感覺不錯。

1. 啟用 VS2017 的 Docker Support 有 2 種途徑:

1.1 在創建 ASP.NET Core 項目時選中“Enable Docker Support”

1.2 或者在已有的項目(注:不是解決方案)中添加 Docker Support

2. 添加 Docker Support 之后,VS2017 會生產 4 個 Docker 配置文件和 1 個 .dcproj 文件。

2.1 Dockfile

FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "aspnetcore2-20170530.dll"]

2.2 docker-compose.ci.build.yml

version: '3'

services:
  ci-build:
    image: microsoft/aspnetcore-build:1.0-1.1
    volumes:
      - .:/src
    working_dir: /src
    command: /bin/bash -c "dotnet restore ./aspnetcore2-20170530.sln && dotnet publish ./aspnetcore2-20170530.sln -c Release -o ./obj/Docker/publish"

(注:由于這里時 ASP.NET Core 2.0 的項目,需要把上面的 microsoft/aspnetcore-build:1.0-1.1 改為 microsoft/aspnetcore-build:2.0)

2.3 docker-compose.yml

version: '3'

services:
  aspnetcore2-20170530:
    image: aspnetcore2-20170530
    build:
      context: ./aspnetcore2-20170530
      dockerfile: Dockerfile

2.4 docker-compose.override.yml

version: '3'

services:
  aspnetcore2-20170530:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
    ports:
      - "80"

(注:為了可以在容器外部訪問站點,需要修改上面 ports 部分配置,這里將 "80" 改為 "8008:80" )

3. 在另外 1 臺 Linux 服務器上用 Docker 分別創建 2 個容器發布(dotnet publish)與運行 ASP.NET Core 站點

3.1 在 Linux 機器上簽出 ASP.NET Core 項目(已安裝 Docker)

3.2 根據 docker-compose.ci.build.yml 配置文件基于 microsoft/aspnetcore-build:2.0 image 創建用于發布 ASP.NET Core 站點的容器

# docker-compose --file  docker-compose.ci.build.yml up
Pulling ci-build (microsoft/aspnetcore-build:2.0)...
2.0: Pulling from microsoft/aspnetcore-build
...
Status: Downloaded newer image for microsoft/aspnetcore-build:2.0
...
Starting src_ci-build_1 ... 
Starting src_ci-build_1 ... done
Attaching to src_ci-build_1
...
src_ci-build_1 exited with code 0

3.3 根據 docker-compose.yml + docker-compose.override.yml 基于 microsoft/aspnetcore:2.0 image(來自Dockerfile的配置)創建用于運行 ASP.NET Core 站點的容器

# docker-compose up
Starting src_cnblogs.cache.webapi_1 ... 
Starting src_cnblogs.cache.webapi_1 ... done
Attaching to src_cnblogs.cache.webapi_1
cnblogs.cache.webapi_1  | Hosting environment: Development
cnblogs.cache.webapi_1  | Content root path: /app
cnblogs.cache.webapi_1  | Now listening on: http://[::]:80
cnblogs.cache.webapi_1  | Application started. Press Ctrl+C to shut down.

這時通過這臺 Linux 服務器的 8008 端口就可以訪問運行在 Docker 容器中的 ASP.NET Core 站點。

這樣簡單快速地體驗一下用 Docker 部署 ASP.NET Core 站點的確是一個不錯的入門途徑。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()