nginx部署php和vue等多個項目(nginx部署多個網(wǎng)站)
Docker是現(xiàn)在比較流行的開源容器引擎,有了它讓我們部署和維護系統(tǒng)更加方便,它 本質(zhì)上是一個精簡版的linux系統(tǒng),所以它支持.NET跨平臺部署。.NET6是微軟最新發(fā)布的.NET版本,跟前面版本相比速度更快、支持熱更新、支持http3等特征。本文介紹如何把.NET 6快速部署到Docker,只需要三個步驟。
第一步 .NET項目準備
首先新建一個.NET6的項目,創(chuàng)建項目時,在“其他信息”選項中選擇“啟用Docker”。創(chuàng)建項目后會自動生成一個Dockerfile文件,這個文件就是創(chuàng)建Docker鏡像的配置文件。 Dockerfile文件也是必要條件,微軟官方已經(jīng)給你配置好了,文章后面有說明。
如果要在windows環(huán)境下預覽這個項目的話,需要注釋掉Properties文件夾下launchSettings.json文件里的docker支持。如下
第二步 執(zhí)行生成鏡像命令
把創(chuàng)建好的項目文件(是整個項目)用工具拷貝到裝有Docker-ce環(huán)境下的centos網(wǎng)站文件夾下。并cd進入這個文件夾。執(zhí)行如下命令:
展開全文
結(jié)果會提示成功信息:
這個過程主要是根據(jù) Dockerfile文件的配置生成項目并copy到docker創(chuàng)建名為 imagesname、版本號為1.0的鏡像。
這有兩個,一個是未加版本號的,一個是加了版本號創(chuàng)建的。
第三步 執(zhí)行命令創(chuàng)建網(wǎng)站容器
鏡像創(chuàng)建完成后就可以創(chuàng)建并運行容器了。默認是80端口,我們這里指定外網(wǎng)訪問5000端口( -p 5000:80),容器名稱是mycontaintest1( --name=mycontaintest1),鏡像是imagesname1.0版本( imagesname:1.0)
這樣我們通過三步完成了把.NET6部署到Docker上了,我們還可以使用Nginx對它做反向代理供外網(wǎng)訪問,大家可以嘗試一下。
我們來看看效果:
注意:必須 Docker環(huán)境和Centos端口環(huán)境沒有問題的情況下部署,否則會走很多彎路哦。
Docker相關知識點
1、dockerfile常用命令解析
FROM
基礎鏡像,F(xiàn)ROM 命令必須是 Dockerfile 的首個命令
也就是繼承那個鏡像
LABEL
為鏡像生成元數(shù)據(jù)標簽信息
原有指令 MAINTAINER 已經(jīng)放棄使用,用 LABEL maintainer="你的郵箱" 替代
USER
指定運行容器時的用戶名或 UID,后續(xù) RUN 也會使用指定用戶
VOLUME
定義匿名卷,容器運行時應該盡量保持容器存儲層不發(fā)生寫操作,為了防止運行時用戶忘記將動態(tài)文件保存的目錄掛載為卷,可以事先指定某些目錄掛載為匿名卷。這樣就不會向容器存儲層寫入大量數(shù)據(jù)
WORKDIR
用于設置 CMD 指明的命令的運行目錄
為后續(xù)的 RUN、CMD、ENTRYPOINT、ADD 指令配置工作目錄??梢允褂枚鄠€ WORKDIR 指令,后續(xù)命令如果參數(shù)是相對路徑,則會基于之前命令指定的路徑。使用 docker exec -it 進入容器后,默認也會進入到 WORKDIR 指定的目錄
容器啟動時的?作?錄
ENV
指定容器啟動時的環(huán)境變量(注意,只有在容器啟動時,啟動腳本能讀取到,如果希望其他用戶登錄到容器也生效的話,需要寫入 .bashrc)
設置鏡像內(nèi)的環(huán)境變量
COPY
COPY 命令有兩個參數(shù),源和目標。它的基本作用是從源系統(tǒng)的文件系統(tǒng)上復制文件到目標容器的文件系統(tǒng)
EXPOSE
指定端口轉(zhuǎn)發(fā)
CMD
設置容器創(chuàng)建是執(zhí)行的默認命令
支持三種格式,默認會被 docker run 指定的參數(shù)覆蓋。每個容器只能執(zhí)行一條 CMD 命令。執(zhí)行的命令和參數(shù)當指定多個時,只有最后一個起效
CMD [“executable”, “參數(shù)1”,“參數(shù)2”]:使用 exec 方式執(zhí)行,推薦
CMD command 參數(shù)1 參數(shù)2:shell 方式執(zhí)行
CMD [“參數(shù)1”,“參數(shù)2”]:提供給 ENTRYPOINT 做默認參數(shù)
啟動容器時執(zhí)行的shell命令
ENTRYPOINT
指定容器的“入口”
支持兩種格式,默認不會被 docker run 指定的參數(shù)覆蓋。可以指定 --entrypoint 參數(shù)去覆蓋。每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最后一個起效
ENTRYPOINT [“executable”, “參數(shù)1”,“參數(shù)2”]:使用 exec 方式執(zhí)行
推薦 - ENTRYPOINT command 參數(shù)1 參數(shù)2:shell 方式執(zhí)行
指定容器啟動腳本
HEALTHCHECK
Docker 1.12版本后引入的判斷容器運行狀態(tài)是否正常
ADD
將?作?錄下的某個?錄或者?件copy到鏡像的某個路徑下
ARG
構建環(huán)境的環(huán)境變量
RUN
RUN 命令是 Dockerfile 執(zhí)行命令的核心部分。它接受命令作為參數(shù)并用于創(chuàng)建鏡像。每條 RUN 命令在當前基礎鏡像上執(zhí)行,并且會提交一個新鏡像
執(zhí)?shell 命令
2、build 命令用于使用 Dockerfile 創(chuàng)建鏡像
語法
docker build [OPTIONS] PATH | URL | -
OPTIONS說明:
--build-arg=[] :設置鏡像創(chuàng)建時的變量;
--cpu-shares :設置 cpu 使用權重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配額;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的內(nèi)存 id;
--disable-content-trust :忽略校驗,默認開啟;
-f :指定要使用的Dockerfile路徑;
--force-rm :設置鏡像過程中刪除中間容器;
--isolation :使用容器隔離技術;
--label=[] :設置鏡像使用的元數(shù)據(jù);
-m :設置內(nèi)存最大值;
--memory-swap :設置Swap的最大值為內(nèi)存+swap,"-1"表示不限swap;
--no-cache :創(chuàng)建鏡像的過程不使用緩存;
--pull :嘗試去更新鏡像的新版本;
--quiet, -q :安靜模式,成功后只輸出鏡像 ID;
--rm :設置鏡像成功后刪除中間容器;
--shm-size :設置/dev/shm的大小,默認值是64M;
--ulimit :Ulimit配置。
--tag, -t: 鏡像的名字及標簽,通常 name:tag 或者 name 格式;可以在一次構建中為一個鏡像設置多個標簽。
--network: 默認 default。在構建期間設置RUN指令的網(wǎng)絡模式
實例
使用當前目錄的 Dockerfile 創(chuàng)建鏡像,標簽為 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 .
使用URL github.com/creack/docker-firefox 的 Dockerfile 創(chuàng)建鏡像。
docker build github.com/creack/docker-firefox
也可以通過 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .
3、run 創(chuàng)建一個新的容器并運行一個命令
語法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS說明:
-a stdin: 指定標準輸入輸出內(nèi)容類型,可選 STDIN/STDOUT/STDERR 三項;
-d: 后臺運行容器,并返回容器ID;
-i: 以交互模式運行容器,通常與 -t 同時使用;
-p: 端口映射,格式為:主機(宿主)端口:容器端口
-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
--name="nginx-lb": 為容器指定一個名稱;
--dns 8.8.8.8: 指定容器使用的DNS服務器,默認和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默認和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 設置環(huán)境變量;
--env-file=[]: 從指定文件讀入環(huán)境變量;
--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;
-m :設置容器使用內(nèi)存最大值;
--net="bridge": 指定容器的網(wǎng)絡連接類型,支持 bridge/host/none/container: 四種類型;
--link=[]: 添加鏈接到另一個容器;
--expose=[]: 開放一個端口或一組端口
實例
使用docker鏡像nginx:latest以后臺模式啟動一個容器,并將容器命名為mynginx。
docker run --name mynginx -d nginx:latest
使用鏡像nginx:latest以后臺模式啟動一個容器,并將容器的80端口映射到主機隨機端口。
docker run -P -d nginx:latest
使用鏡像 nginx:latest,以后臺模式啟動一個容器,將容器的 80 端口映射到主機的 80 端口,主機的目錄 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
參考1:https://www.runoob.com/
參考2:https://www.cnblogs.com/Durant0420/p/15486849.html
結(jié)語
本文講述了.net6部署到docker的簡單過程,僅供參考,真正項目部署還有很多知識點,這里就不再講了。其實也可以把.NET項目打包后部署,只需要修改Dockerfile的配置就可以了,大家可以嘗試一下。希望本文對大家學習和工作有一定參考價值,同時歡迎大家留言討論,謝謝大家的支持。
版權聲明:本文來源于網(wǎng)友收集或網(wǎng)友提供,僅供學習交流之用,如果有侵權,請轉(zhuǎn)告版主或者留言,本公眾號立即刪除。
支持小薇
騰訊云福利 :
云服務器入門體驗低至6.6元/月,更多瀏覽
鏈接:https://curl.qcloud.com/1VVs7OBH
關注: DotNet開發(fā)跳槽
覺得不錯,請點個在看 呀
掃描二維碼推送至手機訪問。
版權聲明:本文由河南新鄉(xiāng)捷東實業(yè)有限公司發(fā)布,如需轉(zhuǎn)載請注明出處。