一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - docker部署Asp.net core應用的完整步驟

docker部署Asp.net core應用的完整步驟

2020-06-14 15:24撈月亮的猴子 ASP.NET教程

這篇文章主要給大家介紹了關于docker部署Asp.net core應用的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Asp.net core具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

1 容器概念

 

使用Docker前我們首先要簡單了解一下容器的概念。MSDN上有一張虛擬機和容器的對比圖,很好的展示了虛擬機和容器的區別,如下所示,虛擬機包括應用程序、必需的庫或二進制文件以及完整的來賓操作系統,每臺虛擬機都有一個單獨的內核,我們完全可以把虛擬機看做是一臺真實的物理機。容器包括應用程序及其所有依賴項,與其他容器共享 OS 內核,容器在主機操作系統上作為獨立進程運行,我們可以把容器看做是一個應用沙盒。

我們經常會遇到“我機器上可以運行”的問題吧,然后部署到其他機器時就遇到了各種坑,這多是因為其他設備上缺少應用所需的環境或者缺少應用的依賴項造成的。使用容器技術可以很好的解決這個問題,容器是一個“應用的沙盒”,這個沙盒內部包含了應用所需的環境和所有依賴項,只要有這個沙盒存在,應用在任何環境下都能正常的運行,容器技術的典型特點就是“一次封裝,到處運行”。

docker部署Asp.net core應用的完整步驟 docker部署Asp.net core應用的完整步驟

Docker 是一個使用go語言開發的開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化。我們先了解Docker中的三個核心概念:

1 鏡像(Image)

 鏡像是一種輕量級、可執行的獨立軟件包,它包含運行某個軟件所需的所有內容,包括代碼、運行時、庫、環境變量和配置文件。

2 容器(Container)

 容器是鏡像的運行時實例 ,執行鏡像時內存中運行的就是容器。如果把鏡像看做面向對象中的類,容器就是對象。使用類時通過new來獲取一個對象,類似的使用鏡像時通過 docker run <鏡像名/鏡像id>創建一個容器。

3 倉庫(Repository)

 倉庫時用來存放鏡像的地方,Docker hub是docker官方提供的倉庫,類似于githhub,,通過push推送鏡像到倉庫,通過pull命令拉取鏡像。當然我們也可以使用其他倉庫,或者自己搭建一個倉庫。

2安裝docker

 

 1 Windows安裝docker

docker是運行在Linux系統上的,在Windows上使用docker默認要用到Hyper-V功能,所以我們在Windows系統上安裝Docker必須先開啟Hyper-V功能。首先打開【控制面板】,找到【啟動或關閉Windows功能】,然后勾選【Hyper-V】,點擊確定即可安裝Hyper-V。

docker部署Asp.net core應用的完整步驟

安裝好Hyper-V后,到docker官網下載Windows版本的docker,docker需要登錄賬戶才能下載,我們可以創建一個賬戶,牢記這個賬號,我們以后會經常用到。docke下載地址:docker下載。下載完成后,雙擊安裝包,一路next即可。安裝完成后需要重啟電腦,打開命令行,輸入docker run hello-world,如果出現以下界面,表示docker已經安裝成功了。docker run hello-world命令首先會在本地找名字為hello-world的鏡像,如果本地不存在這個鏡像就會從docker hub上拉取hello-world鏡像,然后運行。

docker部署Asp.net core應用的完整步驟

2 Centos安裝docker

Linux系統安裝常用軟件都十分方便,執行下邊的命令即可安裝docker

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#刪除舊版本
sudo yum remove docker \
   docker-client \
   docker-client-latest \
   docker-common \
   docker-latest \
   docker-latest-logrotate \
   docker-logrotate \
   docker-engine
#安裝一些需要的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
#添加軟件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum緩存
yum makecache fast
#安裝docker
yum -y install docker-ce
#啟動docker服務
systemctl start docker
#測試docker
docker run hello-world

安裝完成后執行docker run hello-world命令,如果出現下邊的界面表示docker安裝成功了

docker部署Asp.net core應用的完整步驟

3 Docker基本使用

 

1 使用官方docker實例

可以查看官方教程詳細地了解docker的使用,這里我們先用兩分鐘分鐘展示一下微軟官方提供的docker栗子,執行命令docker run -p 8000:80 --name aspnetcore_sample mcr.microsoft.com/dotnet/core/samples:aspnetapp,-p 8000:80表示將服務器的8000端口和容器的80端口建立映射,訪問服務器8000端口時會去訪問容器的80端口。--name設置鏡像的名字

docker部署Asp.net core應用的完整步驟

打開瀏覽器,訪問虛擬機的8000端口如下,說明我們的容器已經成功啟動了!

docker部署Asp.net core應用的完整步驟

我們使用docker imagesdocker container ls查看一下本機的容器和鏡像,結果如下:

docker部署Asp.net core應用的完整步驟

2 Docker常用命令

其實我們實際開發中能用到的docker命令并不多,這里簡單匯總一下最常用的docker命令。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
## 查看docker版本和信息
#查看docker-cli的版本
docker --version
#查看docker版本和信息
docker version
docker info
 
## docker鏡像相關命令
#拉取鏡像
docker pull [imgName:tag]
#運行鏡像,執行后會生成一個容器
docker run [imgName:tag/imgID]
#查看所有的鏡像
docker images
#刪除鏡像 執行rmi命令前必須刪除所有該鏡像的container
docker rmi [imgName:tag/imgID]
#查看所有的容器,沒有-a表示查詢所有正在運行中的容器
docker container ls -a
#查看docker正在運行和已經停止的容器
docker ps -a
#啟動容器
docker start [ctnName/cID]
#停止容器
docker stop [ctnName/cID]
#刪除容器,執行rm命令前必須先停止該容器
docke rm [ctnName/cID]
 
##清理鏡像和容器
#刪除所有的鏡像和容器
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)
#刪除所有的容器
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q)
#清除名稱為none的鏡像
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi

有時候我們需要和容器交互,可以使用命令docker exec -it [name/id] common。如我們啟動一個mysql容器mysqlx1,執行docker exec -it mysqlx1 mysql -p表示和容器mysqlx1交互,執行的命令是【mysql -p】進行登錄,如下所示。Ctrl +p+q退出容器,回到服務器目錄。

docker部署Asp.net core應用的完整步驟

3 定制容器

大多數用戶使用docker的核心目的是更方便的交付項目,就是將我們的應用程序構建成鏡像,然后交付鏡像即可,這里演示怎么構建一個Aspnet core項目的鏡像。

1. 開發aspnet core應用

我們創建一個Asp net core MVC項目,項目名為DockerDemo,為了方便不勾選Https和Docker支持,如下:

docker部署Asp.net core應用的完整步驟

簡單修改首頁,運行一下,測試項目沒有bug,運行首頁如下:

docker部署Asp.net core應用的完整步驟

2 發布項目,添加Dockerfile

發布項目,然后在發布文件夾下添加Dockerfile文件,結構如下:

docker部署Asp.net core應用的完整步驟

Dockerfile的內容如下:

?
1
2
3
4
5
6
7
8
9
10
#拉取runtime父鏡像,運行aspnet core應用必須要用runtime
FROM microsoft/dotnet:2.2-aspnetcore-runtime
#設置容器工作目錄
WORKDIR /DockerDemo
#把當前目錄的所有文件copy到工作目錄中
COPY . /DockerDemo
#暴露一個端口讓外部可以訪問
EXPOSE 80
#容器入口命令,即容器啟動時執行dotnet DockerDemo.dll命令
ENTRYPOINT ["dotnet", "DockerDemo.dll"]

Dockerfile常見指令簡單說明

?
1
2
3
4
5
6
7
8
9
10
11
Dockerfile常用指令:
 
#FROM:通常情況下,我們創建的鏡像時基于另外一個鏡像的,這時就要用FROM,當然我們也可以完全從頭創建
#WORKDIR:設置容器的工作目錄
#MAINTAINER:該鏡像的維護人
#COPY:經常需要把源碼復制到容器中,只用COPY就可以實現這一點
#RUN:這里可以定義一些需要運行的命令,執行的目錄是WORKDIR。如npm install ,dotnet restore,dotnet run等
#ENTRYPOINT:定義容器的入口,通常是一些dotnet/node等命令,如dotnet xxx.dll
#CMD:設置容器運行的默認命令和參數,即容器啟動時執行的命令。當容器運行時,可以通過命令行覆蓋CMD定義的命令
#EXPOSE:暴露端口
#ENV:設置環境變量

3 創建鏡像

docker創建鏡像很簡單,執行docker build -t dockerdemo:v1.0 .命令即可創建鏡像,其中dockerdemo:v1.0是鏡像的名字和版本tag,名字和tag可以隨便設置。然后通過docker images命令查看所有鏡像,如下:

docker部署Asp.net core應用的完整步驟

4 運行容器

使用命令docker run -d -p 8080:80dockerdemo:v1.0啟動容器,-d 表示后臺運行,-p 8080:80表示服務器的8080端口映射到容器的80端口,我們也可以使用服務器的其他端口,容器的端口為Dockerfile中Expose的端口。執行docker container ls查看容器,這里我們的容器已經啟動了,如下:

docker部署Asp.net core應用的完整步驟

打開瀏覽器,輸入【服務器IP:服務器端口】接口訪問容器,如下:

docker部署Asp.net core應用的完整步驟

到這一步,本地創建鏡像和運行容器成功了。

5 使用docker hub存儲和分發鏡像

docker提供了遠程倉庫用于存儲和分發鏡像,其作用類似于github,區別在于github托管代碼,而docker hub托管鏡像。我們創建好了鏡像可以推送(push)到遠程倉庫,然后在其他設備上拉取(pull)鏡像,有了docker hub我們可以更方便的管理和分發鏡像。docker hub的使用非常簡單,只記住三個命令就可以了

?
1
2
3
4
5
6
7
8
9
10
#標記鏡像,就是設置遠程鏡像名和標記
docker tag localname:localtag dockeruser/repname:reptag
#推送鏡像文件到docker hub
docker push username/repname:reptag
#拉取遠程鏡像
docker pull repname:reptag
 
#注:localname是本地鏡像名 localtag是本地鏡像tag
# repname遠程倉庫的鏡像名 reptag是遠程倉庫的tag
# username是我們的dockerhub用戶名

這里將上邊創建的本地鏡像推動到docker hub。使用命令docker tag dockerdemo:v1.0 wyyxxx/resdockerdemo:v1.0標記,使用命令docker push wyyxxx/resdockerdemo:v1.0推動鏡像到遠程倉庫,打開鏡像倉庫,登陸后就可以看到我們自定義的鏡像了,如下所示。

docker部署Asp.net core應用的完整步驟

然后使用另一臺安裝了docker的服務器,執行命令docker run -p 8080:80 wyyxxx/resdockerdemo:v1.0拉取遠程鏡像并啟動,打開瀏覽器輸入地址,如下:

docker部署Asp.net core應用的完整步驟

我們在通過拉取遠程鏡像并運行容器時,不需要事先部署環境(如安裝runtime)等,因為鏡像中已經設置了需要的所有環境和依賴資源,只需要使用docker run命令運行即可。這也是使用容器交付的方便之處。

4 使用Docker的一點建議

 

① “3C原則”一個容器只運行一個應用

② 使用鏡像交付應用程序,而不是直接部署

如果要在centos上部署一個aspnet core應用程序。錯誤的做法是:在docker中先安裝一個centos系統,在centos系統中部署環境,然后部署我們的netcore應用程序,,最后把部署的應用程序生成鏡像。正確的做法是通過Dockerfile定義我們需要的環境和依賴項,然后生成鏡像,通過鏡像去分發和執行。

③ 分層構建鏡像

還是上邊centos部署netcore應用的栗子,如果從零定制鏡像時,我們應該把centos作為一層鏡像,環境runtime作為一層鏡像,最后我們的應用做為一層鏡像,使用Dockerfile的FROM 指令拉取父鏡像。這樣做的好處是節省空間和復用鏡像。如上邊我們使用了2.2版本的runtime鏡像,當我們創建了另一個web應用再來定制鏡像時,這兩個應用程序鏡像可以 共用同一個runtime鏡像。

④ 不要把數據存儲在容器中

容器是隨時可能銷毀的,銷毀后容器內部的數據就不存在了,所以最好不要在容器中存儲需要持久化的數據。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/wyy1234/p/10747196.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜影院免费观看视频 | 欧美se图 | 日本老头4569gay | 午夜成私人影院在线观看 | 日韩精品视频美在线精品视频 | 欧美高清在线精品一区二区不卡 | 男人边吃奶边做好爽视频免费 | 色戒完整版 | 日本高清视频在线免费观看 | 99久久国产亚洲综合精品 | 国产精品久久久久久久久免费hd | 温柔校草高h | 午夜片神马影院福利 | 男生的j桶女人屁免费视频 男生操男生 | 白丝爆动漫羞羞动漫软件 | 日韩精品一区二区三区视频 | 欧美久久久久久 | 91混血大战上海双胞胎 | 99九九国产精品免费视频 | 五月婷婷丁香色 | 欧美色影视 | 天天中文 | 古代翁熄系小说辣文 | 免费真实播放国产乱子伦 | 饭冈加奈子在线播放观看 | 亚洲精品国产综合久久一线 | 校园刺激全黄H全肉细节文 校草让我脱了内裤给全班看 | 日韩国产欧美一区二区三区 | 国产精品国产色综合色 | 村妇超级乱淫伦小说全集 | 范冰冰a级一级特级毛片 | 全弄乱纶小说 | 国产成人久久精品区一区二区 | 日韩精品一区二区三区老鸭窝 | 免费理伦片在线观看全网站 | 欧美一区二区三区四区视频 | 国产成人在线小视频 | yellow在线 | 丁香五香天堂 | 国产自产2023最新麻豆 | 久久国产精品高清一区二区三区 |