欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NETCore Docker實現(xiàn)容器化與私有鏡像倉庫管理

 更新時間:2019年08月28日 12:02:37   作者:hailang2zh  
Docker是用Go語言編寫基于Linux操作系統(tǒng)的一些特性開發(fā)的,其提供了操作系統(tǒng)級別的抽象,是一種容器管理技術(shù),它隔離了應(yīng)用程序?qū)A(chǔ)架構(gòu)(操作系統(tǒng)等)的依賴。這篇文章主要介紹了.NETCore Docker實現(xiàn)容器化與私有鏡像倉庫管理,需要的朋友可以參考下

一、Docker介紹

Docker是用Go語言編寫基于Linux操作系統(tǒng)的一些特性開發(fā)的,其提供了操作系統(tǒng)級別的抽象,是一種容器管理技術(shù),它隔離了應(yīng)用程序?qū)A(chǔ)架構(gòu)(操作系統(tǒng)等)的依賴。相較于虛擬機(jī)而言,Docker共享的是宿主機(jī)的硬件資源,使用容器來提供獨立的運行環(huán)境來運行應(yīng)用。虛擬機(jī)則是基于Supervisor(虛擬機(jī)管理程序)使用虛擬化技術(shù)來提供隔離的虛擬機(jī),在虛擬機(jī)的操作系統(tǒng)上提供運行環(huán)境!雖然兩者都提供了很好的資源隔離,但很明顯Docker的虛擬化開銷更低!

Docker涉及了三個核心概念:Register、Image、Container。

1. Registry:倉庫。用來存儲Docker鏡像,比如Docker官方的Docker Hub就是一個公開的倉庫,在上面我們可以下載我們需要的鏡像。

2. Image:鏡像。開發(fā)人員創(chuàng)建一個應(yīng)用程序或服務(wù),并將它及其依賴關(guān)系打包到一個容器鏡像中。鏡像是應(yīng)用程序的配置及其依賴關(guān)系的靜態(tài)形式。

3. Container:容器。Container是鏡像的運行實例,它是一個隔離的、資源受控的可移植的運行時環(huán)境,其中包含操作系統(tǒng)、需要運行的程序、運行程序的相關(guān)依賴、環(huán)境變量等。

它們?nèi)叩南嗷プ饔藐P(guān)系是:

當(dāng)我們執(zhí)行Docker pull或Docker run命令時,若本地?zé)o所需的鏡像,那么將會從倉庫(一般為DockerHub)下載(pull)一個鏡像。Docker執(zhí)行run方法得到一個容器,用戶在容器里執(zhí)行各種操作。Docker執(zhí)行commit方法將一個容器轉(zhuǎn)化為鏡像。Docker利用login、push等命令將本地鏡像推送(push)到倉庫。其他機(jī)器或服務(wù)器上就可以使用該鏡像去生成容器,進(jìn)而運行相應(yīng)的應(yīng)用程序。

二、Docker安裝

1、使用yum源安裝, 由于國內(nèi)訪問官方源慢,此處添加阿里的源

 > wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 > yum install -y docker-ce

2、啟動Docker

 //啟動 Docker CE
 > systemctl start docker
 > systemctl enable docker
 //查看Docker狀態(tài)
 > systemctl status docker
 //查看docker版本
 > docker -v

3、測試Docker是否正確安裝,執(zhí)行命令:

> docker run hello-world

a、當(dāng)執(zhí)行 docker run hello-world 時,docker首先會從本地找 hello-world 的鏡像,如果本地沒有,它將會從默認(rèn)的鏡像倉庫Docker Hub上拉取鏡像。鏡像拉取到本地后,就實例化鏡像得到容器,輸出Hello from Docker!。

b、Docker Engine提供了Docker的核心技術(shù): 圖像(images)和容器(containers). 在安裝教程的最后一步, 你運行了Engine命令docker run hello-world. 這一個命令,使Engine完成了Docker的核心任務(wù), 該命令包含了三部分.

c、一個容器是一個精簡版的Linux操作系統(tǒng), 一個鏡像是加載到這個容器的軟件, 當(dāng)你運行這個命令后, Engine會做下面的事情:

1.檢查是否存在hello-world這個軟件鏡像

2.從Docker Hub下載鏡像(稍后了解Docker Hub)

3.加載這個鏡像到容器中, 并運行它

三、.Netcore項目在Docker中運行

1、拉取microsoft/dotnet鏡像,等幾分鐘后即可安裝完畢,執(zhí)行docker images可以看到本地已經(jīng)包含microsoft/dotnet鏡像

> docker pull microsoft/dotnet

2、運行microsoft/dotnet鏡像, 使用docker run <image>可以啟動鏡像,通過指定參數(shù)-it以交互模式(進(jìn)入容器內(nèi)部)啟動。依次執(zhí)行以下命令:

 > docker run -it microsoft/dotnet //啟動一個dotnet鏡像
 > dotnet new mvc -n mvctest //創(chuàng)建項目名為mvctest的.NET Core MVC項目
 > cd mvctest //進(jìn)入mvctest文件夾
 > dotnet run //啟動.NET Core MVC項目

運行結(jié)果如下圖所示:

鍵盤按住Ctrl+C即可關(guān)閉應(yīng)用,輸入exit即可退出當(dāng)前容器

以上簡單的幾步就完成了一個.NET Core MVC項目的創(chuàng)建和運行,這個時候你可能會好奇,Linux宿主機(jī)上并沒有安裝.NET Core SDK啊,MVC項目是如何創(chuàng)建的呢?這就是Docker神奇的地方,我們從鏡像倉庫中拉取的dotnet鏡像,包含了創(chuàng)建、構(gòu)建、運行.NET Core項目所需的一切依賴和運行時環(huán)境。

退出容器之后,執(zhí)行find -name mvctest(查找mvctest文件),我們發(fā)現(xiàn)并沒有找到。這說明我們剛才創(chuàng)建的.NET Core MVC項目是在容器內(nèi)部創(chuàng)建的,是與宿主機(jī)完全隔離的。這個時候你可能會想,每次都要在容器中安裝源代碼太不方便了,我們能不能讓容器運行我們宿主機(jī)的源代碼項目?嗯,這是個好問題。當(dāng)然是可以實現(xiàn)的,下面我們就來解答這個問題。

四、 宿主機(jī)上創(chuàng)建.NET Core 項目

為了在宿主機(jī)上創(chuàng)建.NET Core 項目,這個時候我們就需要在Linux宿主機(jī)上安裝.NET Core SDK

1、宿主機(jī)安裝.NET Core SDK

添加yum源:sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

開始安裝:yum install -y dotnet-sdk-2.1

檢測安裝版本,如下圖表示安裝正確

2、創(chuàng)建.NET Core項目

 > mkdir data
 > cd data
 > dotnet new mvc -n mvctest //創(chuàng)建項目名為mvctest的.NET Core MVC項目
 > cd mvctest //進(jìn)入mvctest文件夾
 > dotnet run //啟動.NET Core MVC項目

注:在Program.cs文件中加入代碼.UseUrls("http://*:5000"),在瀏覽器中訪問如下圖:

下一步我們就將該目錄下的源碼項目通過掛載的方式共享到容器中去

3、掛載宿主機(jī)項目到容器中


在啟動Docker鏡像時,Docker允許我們通過使用-v參數(shù)掛載宿主機(jī)的文件到容器的指定目錄下。換句話說,就相當(dāng)于宿主機(jī)共享指定文件供容器去訪問

// 命令中的`\`結(jié)合`Enter`鍵構(gòu)成換行符,允許我們換行輸入一個長命令。
 > docker run -it \
 > -v /data/mvctest/:/app \
 > microsoft/dotnet:latest

上面的命令就是把/data/mvctest/文件夾下的文件掛載到容器的\app目錄下


從上面的執(zhí)行結(jié)果來看,容器內(nèi)部中的app目錄下包含了宿主機(jī)上的源碼項目。

上面說到是以共享的形式,而不是容器擁有一份宿主機(jī)目錄的拷貝,意味著,在宿主機(jī)上對目錄的更改,會即時反應(yīng)到容器中。但反過來,容器中對共享目錄的更改,不會反應(yīng)到宿主機(jī)上,不然就打破了容器具有的隔離特性。

通過這樣一個簡單場景,聰明的你是否會聯(lián)想到這一場景在我們?nèi)粘>幋a的應(yīng)用之處呢?是的,我們可以用來持續(xù)構(gòu)建(CI)?;舅悸肥?,通過git clone源碼到宿主機(jī)上,然后將源碼目錄掛載到容器中去進(jìn)行構(gòu)建

4、借助Dockerfile文件

下篇我們升級此操作,不需Dockerfile的依賴,操作一條命令搞定。

Dockerfile用來定義你將要在容器中執(zhí)行的系列操作。我們來創(chuàng)建第一個Dockerfile

 > cd /data/mvctest/ //確保進(jìn)入我們創(chuàng)建的MVC項目目錄中去
 > touch Dockerfile //使用touch命令創(chuàng)建Dockerfile
 > vi Dockerfile //使用vi命令編輯Dockerfile

進(jìn)入VI編輯界面后,復(fù)制以下代碼,使用shift + Ins命令即可粘貼。然后按ESE退出編輯模式,按shift + :,輸入wq即可保存并退出編輯界面

FROM microsoft/dotnet:latest
 WORKDIR /app
 COPY . /app
 RUN dotnet restore
 EXPOSE 5000
 ENV ASPNETCORE_URLS http://*:5000
 ENTRYPOINT ["dotnet","run"]

上面的命令我依次解釋一下:

使用FROM指定容器使用的鏡像

使用WORKDIR指定工作目錄

使用COPY指令,復(fù)制當(dāng)前目錄(其中.即代表當(dāng)前目錄)到容器中的/app目錄下

使用RUN命令指定容器中執(zhí)行的命令

使用EXPOSE指定容器暴露的端口號

使用ENV指定環(huán)境參數(shù),上面用來告訴.NETCore項目在所有網(wǎng)絡(luò)接口上監(jiān)聽5000端口

使用ENTRYPOINT制定容器的入口點

Dockerfile就緒,我們就可以將我們當(dāng)前項目打包成鏡像以分發(fā)部署。

使用docker build -t <name> <path>指令打包鏡像:

> docker build -t mvctest.web .

以上命令就是告訴docker將當(dāng)前目錄打包成鏡像,并命名為hellodocker.web。命令執(zhí)行完畢,輸入docker images即可看到我們新打包的鏡像


鏡像創(chuàng)建完畢我們就可以直接運行了:

> docker run -d -p 80:5000 mvctest.web

上面的指令就是運行我們新打包的鏡像,并通過-p參數(shù)映射容器的5000到宿主機(jī)的80端口,其中-d參數(shù)告訴docker以后臺任務(wù)形式運行鏡像。因為80是默認(rèn)的web端口,所以我們通過瀏覽器直接訪問ip即可訪問到我們?nèi)萜髦羞\行的MVC網(wǎng)站

至此,我們借助Docker就完美的完成了.NET Core項目的容器化部署,后續(xù)我們將鏡像部署在其它的機(jī)器上

五、推送鏡像到倉庫


請自行到Docker Hub注冊個賬號,然后我們把本地打包的鏡像放到自己賬號下的倉庫下

1、注冊完畢后,執(zhí)行命令

> docker login


2、再執(zhí)行命令

> docker push


推送失敗,提示我們的鏡像命名不符規(guī)范。原來在推送之前要把鏡像按<user>/<repo>格式來命名。那如何重命名呢,我們用打標(biāo)簽的方式重命名

以上信息表示推送成功了,查看自己的倉庫,如下圖:

最后我們換一臺機(jī)器,我們直接執(zhí)行以下命令,就完成了多重部署

> docker run -p 8081:5000 79522860/mvcdemo.web

以上自己的鏡像倉庫做好了,是不是很方便,如果結(jié)合業(yè)務(wù),會發(fā)現(xiàn)需要的鏡像會比較多,分布式部署容器還要一個個啟動容器?不,其它我們還可以通過配置文件來一鍵部署鏡像與容器,一下篇我們會講到

六、Docker常用命令

1、容器相關(guān)操作

 > docker ps //查看當(dāng)前正在運行的容器
 > docker ps -a //查看所有容器的狀態(tài)
 > docker start/stop id/name //啟動/停止某個容器
 > docker attach id //進(jìn)入某個容器(使用exit退出后容器也跟著停止運行)
 > docker rm id/name //刪除某個容器,若正在運行,需要先停止
 > docker rm $(docker ps -a -q) //刪除已經(jīng)停止的容器
 > docker logs -f hello-world //查看指定容器的日志記錄

> docker run -it --name hello_001 hello-world //創(chuàng)建一個容器,并指定標(biāo)簽

-i:允許我們對容器內(nèi)的 (STDIN) 進(jìn)行交互

-t:在新容器內(nèi)指定一個偽終端或終端

--name:是給容器起一個名字,可省略,省略的話docker會隨機(jī)產(chǎn)生一個名字

2、鏡像相關(guān)操作

 > docker images //查看本地鏡像
 > docker rmi id/name //刪除某個鏡像,如果不指定tag,默認(rèn)刪除的是latest標(biāo)簽
 > docker rmi $(docker images -q) //刪除所有鏡像,小心
 > docker rmi $(docker images -f "dangling=true" -q) //刪除所有無名稱鏡像(可能是構(gòu)建過程中產(chǎn)生的中間鏡像)
 > docker start/stop id/name //啟動/停止某個容器
 > docker attach id //進(jìn)入某個容器(使用exit退出后容器也跟著停止運行)

通過ID tag鏡像,下面是tag一個id為0e5574283393的本地鏡像到“fedora”存儲庫,tag名稱version1.0

> docker tag 0e5574283393 fedora/httpd:version1.0

通過名稱tag鏡像, 使用名稱“httpd” tag本地鏡像到存儲庫”fedora”,且其tag名為version1.0

> docker tag httpd fedora/httpd:version1.0

注意由于引用httpd的tag名稱沒有指定,默認(rèn)引用httpd:latest

通過名稱和tag名稱 tag一個鏡像,為名稱為httpd和tag名稱為test的本地鏡像做標(biāo)簽,其存儲庫為fedora,標(biāo)簽名為version1.0.test

> docker tag httpd:test fedora/httpd:version1.0.test

tag一個鏡像到私有的存儲庫, 推送一個鏡像到一個私有的registry,而不是公共的docker registry,必須指定一個registry主機(jī)名和端口來tag此鏡像

> docker tag 0e5574283393 myregistryhost:5000/fedora/httpd:version1.

3、卸載 Docker CE

a、卸載Docker包

> yum remove docker-ce

b、主機(jī)上的images, containers, volumes或自定義配置文件不會自動刪除。 刪除所有mages, containers, volumes命令

> rm -rf /var/lib/docker

六、額外知識普及

1、docker官方鏡像庫地址

https://hub.docker.com/r/microsoft/dotnet/

2、microsoft/dotnet 鏡像版本之間的區(qū)別

a、microsoft/dotnet:<version>-sdk(microsoft/dotnet:2.1-sdk)

此映像包含帶有 .NET Core 和命令行工具 (CLI) 的 .NET Core SDK。 此映像將映射到開發(fā)方案。 可使用此映像進(jìn)行本地開發(fā)、調(diào)試和單元測試。 此映像還可用于生成方案。 使用 microsoft/dotnet:sdk 始終都提供最新版本。

b、microsoft/dotnet:<version>-runtime(microsoft/dotnet:2.1-runtime)

此映像包含 .NET Core(運行時和庫),并且針對在生產(chǎn)環(huán)境中運行 .NET Core 應(yīng)用進(jìn)行了優(yōu)化。

c、microsoft/dotnet:<version>-runtime-deps

runtime-deps 映像包括具有 .NET Core 所需的所有本機(jī)依賴項的操作系統(tǒng)。 此映像適用于獨立應(yīng)用程序。

3、鏡像加速

鑒于國內(nèi)網(wǎng)絡(luò)問題,后續(xù)拉取 Docker 鏡像十分緩慢,我們可以配置加速器來解決,我使用的是網(wǎng)易的鏡像地址:http://hub-mirror.c.163.com。

新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 來配置 Daemon。

請在該配置文件中加入(沒有該文件的話,請先建一個):

{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

#刷新配置文件并重啟docker

systemctl daemon-reload

systemctl restart docker

**********如果使用aliyun,需要登陸自己的阿里云賬戶獲取自己的鏡像地址************

總結(jié)

以上所述是小編給大家介紹的.NETCore Docker實現(xiàn)容器化與私有鏡像倉庫管理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • docker下遷移elasticsearch問題以及解決方案

    docker下遷移elasticsearch問題以及解決方案

    文章描述了如何將Elasticsearch數(shù)據(jù)從一個服務(wù)器遷移到另一個服務(wù)器,包括數(shù)據(jù)掛載、版本一致性、啟動命令的匹配以及可能遇到的權(quán)限和節(jié)點故障問題的解決方法
    2024-11-11
  • 淺談Docker 客戶端和守護(hù)進(jìn)程

    淺談Docker 客戶端和守護(hù)進(jìn)程

    這篇文章主要介紹了淺談Docker 客戶端和守護(hù)進(jìn)程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • docker離線安裝社區(qū)版(docker-18.06.3-ce)

    docker離線安裝社區(qū)版(docker-18.06.3-ce)

    在一些特定的環(huán)境下,由于網(wǎng)絡(luò)限制或者其他原因,我們可能需要在Linux系統(tǒng)上進(jìn)行離線安裝Docker,本文就來介紹一下docker離線安裝社區(qū)版,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Docker本地部署Firefox火狐瀏覽器并遠(yuǎn)程訪問的流程

    Docker本地部署Firefox火狐瀏覽器并遠(yuǎn)程訪問的流程

    在Docker中打開Firefox意味著我們將在一個Docker容器中運行Firefox瀏覽器,下面是一個簡單的示例,演示如何在Docker中打開Firefox,本次實踐部署環(huán)境為本地環(huán)境,感興趣的朋友一起看看吧
    2023-11-11
  • docker官方鏡像下載及使用Dockerfile創(chuàng)建鏡像的方法

    docker官方鏡像下載及使用Dockerfile創(chuàng)建鏡像的方法

    這篇文章主要介紹了docker官方鏡像下載及使用Dockerfile創(chuàng)建鏡像的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • Docker login和logout的使用

    Docker login和logout的使用

    本文主要介紹了Docker login和logout的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Docker Compose搭建Redis主從復(fù)制環(huán)境的實現(xiàn)步驟

    Docker Compose搭建Redis主從復(fù)制環(huán)境的實現(xiàn)步驟

    在Docker中搭建Redis主從架構(gòu)非常方便,下面是一個示例,演示如何使用Docker Compose設(shè)置一個Redis主從復(fù)制環(huán)境,文中有詳細(xì)的代碼示例,具有一定的參考價值,需要的朋友可以參考下
    2023-09-09
  • 如何使用docker極簡打包java.jar鏡像并啟動

    如何使用docker極簡打包java.jar鏡像并啟動

    這篇文章主要介紹了如何使用docker極簡打包java.jar鏡像并啟動,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 解決docker容器中出現(xiàn)Access denied for user 'root'@'172.17.0.2'(using password: YES)問題

    解決docker容器中出現(xiàn)Access denied for user &apo

    這篇文章主要介紹了解決docker容器中出現(xiàn)Access denied for user 'root'@'172.17.0.2'(using password: YES)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 詳解如何在 docker 容器中捕獲信號

    詳解如何在 docker 容器中捕獲信號

    本篇文章主要介紹了如何在 docker 容器中捕獲信號,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論