日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net Core in Docker极简入门(上篇)

發布時間:2023/12/4 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net Core in Docker极简入门(上篇) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍字"小黑在哪里"關注我吧

  • 環境準備

  • Docker基礎概念

  • Docker基礎命令

  • Docker命令實踐

  • 構建Docker鏡像

    • Dockerfile

    • bulid & run

前言

Docker 是一個開源的應用容器引擎,它十分火熱,如今幾乎成為了后端開發人員必須掌握的一項技能。即使你在生產環境中可能用不上它,就算把它當作一個輔助開發的工具來使用,也是非常方便的。本文就介紹一下.Net ?Core應用在Docker中的一些基本使用。

開始

環境準備

首先安裝docker,去官網下載:https://www.docker.com/get-started

windows系統的話,默認win10(較新的版本更好,可以用wsl)。win7只能用Docker Toolbox,bug非常多,不建議使用。。。

windows/mac 直接下載對應的文件安裝就可以(本文的系統環境是win10 2004版本。),linux可以通過命令來安裝。關于安裝,網上已經有很多資料了,就不多介紹。只是安裝后有2個必要的設置需要注意一下:

  • 鏡像加速

    有很多提供免費加速服務的網站,可以自行搜索,我這里用的是阿里云。這個國內網絡必須配置,不然鏡像幾乎拉取不下來。

  • 鏡像儲存路徑

  • 默認docker的運行文件是在C盤,C盤空間不夠的話,可以設置到別的盤。

    新版本的windows Docker Desktop默認使用wsl運行:

    這個設置比較麻煩,具體可以參考我之前的一篇:win10使用WSL 2運行Docker Desktop,運行文件從C盤遷移到其他目錄。如果是老版本Hyper-V啟動的話,界面上設置就可以。

    Docker基礎概念

    docker中最重要的2個概念就是“鏡像”和“容器”。

    • 鏡像:

    鏡像(Image)就是一堆只讀層(read-only layer)的統一視角。

    • 容器:

    容器(container)的定義和鏡像(image)幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上面那一層是可讀可寫的。

    要理解docker鏡像和docker容器之間的區別,確實不容易。

    想象一下,我們開發的一個asp.net mvc應用,使用Visual Studio將它發布出來后,會得到一堆發布后的文件,包含dll,cshtml,css,js,靜態資源文件等等。那么這堆文件就類似于一個鏡像,鏡像是無法直接運行的。當我們把這堆文件掛載到IIS的一個站點上,就可以運行了,也能被外界訪問了,這個IIS站點就類似是一個容器。容器相當于是鏡像的一個運行實例,需要注意的是,容器的所有讀寫操作都只是針對容器的文件系統,并不會影響到鏡像。一個鏡像可以運行多個容器,容器之間是相互隔離的。

    Docker基礎命令

    • 鏡像相關:

    docker images:列出所有本地鏡像。

    docker rmi 鏡像...|鏡像ID...:刪除本地鏡像,可以同時指定多個。

    docker build -t myimage:1.1 .:基于Dockerfile構建一個名為myimage,tag為1.1的鏡像,結尾的 . 代表當前目錄。

    docker pull mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-18.04:從微軟鏡像倉庫中拉取tag為2019-CU5-ubuntu-18.04的sqlserver 2019鏡像。

    ......

    • 容器相關:

    docker ps:列出運行中的容器。

    docker ps -a:列出所有的容器,包含未運行的。

    docker run -it --rm -p 8080:80 --name mynginx nginx:使用鏡像nginx創建并啟動一個名為mynginx的容器;-it代表以交互模式啟動,并為容器重新分配一個偽輸入終端;-p指定端口映射,將容器的80端口映射到主機的8080端口;--rm代表容器停止時自動刪除容器。

    docker run -d -p 8080:80 -v /nginx/data:/data --name mynginx nginx:latest:使用鏡像nginx(tag為latest)創建并啟動一個名為mynginx的容器;-d代表以后臺模式啟動;-p指定端口映射,將容器的80端口映射到主機的8080端口;-v代表掛載卷,將主機的/nginx/data目錄掛載到容器的 /data目錄。

    docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" -d -p 1433:1433 --name sqlserver2019 mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-18.04:使用sqlserver鏡像(tag為2019-CU5-ubuntu-18.04)創建并啟動一個名為sqlserver2019的容器;-d代表以后臺模式啟動;-p指定端口映射,將容器的1433端口映射到主機的1433端口;-e是指定環境變量。

    docker start/stop/restart 容器名...|容器ID...:分別是啟動,停止,重啟容器,可以同時指定多個。

    docker rm 容器名...|容器ID... :刪除容器,可以同時指定多個。

    docker logs 容器名|容器ID:查看容器日志。

    ......

    Docker命令實踐

    下面在docker中使用sqlserver2019鏡像啟動一個容器。

  • 拉取鏡像:

  • docker pull mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-18.04

    注意,mcr.microsoft.com是微軟的鏡像源,國內訪問會比較慢。。。

  • 啟動容器:

  • docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Password@2020" -d -p 1433:1433 --name sqlserver2019 mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-18.04

  • 連接測試

  • 使用可視化工具連接數據庫測試,工具有很多,我這里使用的是SQL Server Management(也可以直接在docker中使用命令進入容器連接數據庫測試)。

    使用賬號sa/Password@2020連接。服務器名稱localhost,1433這個1433也可以省略,默認端口就是1433。

    測試連接成功。以上通過2個命令即可得到一個sqlserver2019數據庫,是不是比直接安裝到電腦上要方便很多呢。類似的很多開發環境都可以這么搭建,比如mysql,postgres,redis,mongodb,rabbitmq等等,各種工具隨便折騰,玩壞了大不了刪除容器,重新再來。。。

    構建Docker鏡像

    下面使用docker構建一個asp.net core web應用的鏡像。

    首先使用vs2019新建一個asp.net core web應用程序,選擇web api作為項目模板。

    Dockerfile

    右鍵項目-添加-Docker支持,目標OS選擇Linux。

    添加docker支持后,vs2019會自動幫我們創建Dockerfile文件。Dockerfile就是用來構建鏡像的文件,其中包含了各種指令。以下是Dockerfile指令詳解:

    #使用asp.net?core?3.1作為基礎鏡像,起一個別名為base FROM?mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim?AS?base #設置容器的工作目錄為/app WORKDIR?/app #暴露80端口 EXPOSE?80#使用.net?core?sdk?3.1作為基礎鏡像,起一個別名為build FROM?mcr.microsoft.com/dotnet/core/sdk:3.1-buster?AS?build #設置容器的工作目錄為/src WORKDIR?/src #拷貝WebApplication1/WebApplication1.csproj項目文件到容器中的/src/WebApplication1/目錄 COPY?["WebApplication1/WebApplication1.csproj",?"WebApplication1/"] #執行dotnet?restore命令,相當于平時用vs還原nuget包 RUN?dotnet?restore?"WebApplication1/WebApplication1.csproj" #拷貝當前目錄的文件到到容器的/src目錄 COPY?.?. #設置容器的工作目錄為/src/WebApplication1 WORKDIR?"/src/WebApplication1" #執行dotnet build命令,相當于平時用vs生成項目。以Release模式生成到容器的/app/build目錄 RUN?dotnet?build?"WebApplication1.csproj"?-c?Release?-o?/app/build#將上面的build(.net?core?sdk?3.1)作為基礎鏡像,又重命名為publish FROM?build?AS?publish #執行dotnet publish命令,相當于平時用vs發布項目。以Release模式發布到容器的/app/publish目錄 RUN?dotnet?publish?"WebApplication1.csproj"?-c?Release?-o?/app/publish#將上面的base(asp.net?core?3.1)作為基礎鏡像,又重命名為final FROM?base?AS?final #設置容器的工作目錄為/app WORKDIR?/app #拷貝/app/publish目錄到當前工作目錄 COPY?--from=publish?/app/publish?. #指定容器入口命令,容器啟動時會運行dotnet?WebApplication1.dll ENTRYPOINT?["dotnet",?"WebApplication1.dll"]

    內容挺長,實際上做的事情主要就是通過.net core cli命令來定義了一系列打包發布運行的過程。

    bulid & run

    來到項目根目錄,啟動PowerShell或cmd執行docker命令。

    構建鏡像:docker build -t webapp1 -f ./WebApplication1/Dockerfile .參數-f是指定Dockerfile所在的目錄。

    使用docker images查看本地鏡像,webapp1就是上面構建完成的鏡像:

    啟動容器:docker run -d -p 5000:80 --name web1 webapp1

    使用docker ps查看運行中的容器:

    瀏覽器訪問:http://localhost:5000/weatherforecast

    至此,一個簡單的asp.net core web應用就成功運行于docker之中。

    其實vs2019本身對docker支持就非常好,以上操作直接可以在vs2019中完成,無需手動執行docker命令。

    將項目設置為Docker啟動:

    Ctrl+F5即可啟動:

    注意,這里容器工具首次加載會比較慢。。。啟動完成后會自動打開瀏覽器,并綁定了一個隨機端口:

    這就是vs2019自動幫我們創建的容器:

    查看vs2019中容器工具的輸出日志,可以看到vs2019執行的指令內容。


    本篇先寫到這里。


    如果本文對您有用,

    不妨點個“”或者轉發朋友圈支持一下

    總結

    以上是生活随笔為你收集整理的.Net Core in Docker极简入门(上篇)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。