開始寫這篇博客前,已經嘗試練習過好多次Docker環境安裝,.Net Core環境安裝了,在這里替騰訊雲做一個推廣,假如我們想學習、練手.net core 或是Docker卻苦於沒有開發環境,服務器也不想買,那么我們可以使用騰訊雲提供的開發者實驗,每個實驗項目每天可以免費使用一次,時常45分鍾,學習技術單靠看幾篇文章、幾本書是完全不夠的,”實踐方能出真知“。
一、環境介紹
在練習平台上的環境是CentOS7.3版 或許你會說我不懂Linux怎么辦,沒關系,我也是小白,學點基本命令暫時能用起來就行了。畢竟我們不是專門在Linux下搞開發的。(Linux下專業人士見諒哈)。
Docker容器,如果說Docker容器還不知道什么概念的話,我推薦先暫停,先學習下Docker的基本概念,弄清楚Docker是什么,總比越看越糊塗好.
dotnet鏡像(也可以是aspnetcore鏡像這兩者的關系我將稍后解釋).
OK,開始動手!
二、啟動實驗,安裝Docker
我進入的搭建Docker環境,當然也可以從其他實驗中開始着手。從搭建Docker環境中進入我們可以看到要求的步驟,方便我們快速安裝,僅此而已。
1、先來安裝Docker環境
yum install docker-io -y //CentOS已經將Docker軟件包放在了Extras軟件源中,直接利用即可 docker -v //查看docker的版本 version systemctl start docker.service //開啟Docker服務 systemctl enable docker.service //開機啟動Docker服務
安裝Docker環境時需要等待一到兩分鍾........安裝完畢,接下來我們需要將Docker服務進行啟動
到這里Docker環境的安裝就已經結束了。當然我們還需要配置Docker,開始配置DockerHub:
echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker systemctl daemon-reload //重新載入 systemd,掃描新的或有變動的單元 systemctl restart docker.service //重啟docker服務
三、安裝.Net Core環境
接下來我們將有兩種方式來安裝我們的.net core環境
方式一:在Docker容器中獲取dotnet鏡像
docker pull microsoft/dotnet //安裝.net core鏡像
這種方式提供給了我們.net core的整套模板,編譯工具,RunTime等等,一應俱全。我們可以通過docker命令查看我們已經擁有的鏡像,注意 這需要在Linux主機下查看,別跑到容器中去了
docker images // 查看當前已有的docker鏡像文件
當前命令下我們可以看到dotnet鏡像已經被我們拉取下來了。繼續,我們開始新建並運行一個以dotnet鏡像的容器
docker run -it microsoft/dotnet //啟動一個dotnet鏡像
看到root后面變化了沒,這說明我們已經進入了一個容器,Docker當新建一個容器后,會給這個容器分配一個id,也就是我們所看見的那串字符串了。繼續,通過命令新建一個web應用
dotnet new mvc -n MyFirstDocker.Web //創建項目名為MyFirstDocker.Web的ASP.NET Core MVC項目
我們可以通過ls命令看到當前容器中的所有文件夾信息,MyFirstDocker.Web項目已經創建好了
在MyFirstDocker文件夾內,有很多我們熟悉的東西
接下來,通過命令啟動項目
dotnet run //啟動項目
大功告成,項目啟動,可以通過同時按住Ctrl+q+p退出容器,該命令保持容器中網站運行,然后使用curl -k http://localhost:5000訪問網站
查看當前主機上已有的容器實例
docker ps -a // 查看當前的已存在的容器實例 (不考慮狀態)
在這里我們開始要考慮長遠計划了,假如我需要將新的文件加入進來,我可以采取什么方式,在容器中安裝一個git pull新文件,或許可以,但是如果說這台主機上有十個容器,都運行着服務,莫非我還得十個容器全部安裝git,基於這個考慮,可以嘗試用下這種操作了。我在Linux主機中安裝.Net Core SDK,首先開始配置安裝包的來源
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e "[packages-microsoft-com-prod] name=packages-microsoft-com-prod baseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod enabled=1 gpgcheck=1 gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
接下來開始安裝.net-sdk,版本2.0.3,這個過程耗時比較長,需要耐心等待
sudo yum update sudo yum -y install libunwind libicu sudo yum install dotnet-sdk-2.1.3
好了,開始接下來的操作了
cd /home mkdir aspnetcoreapp cd aspnetcoreapp dotnet new web dotnet restore dotnet run
通過直接啟動,也是可以直接運行起來的,但是肯定是不推薦的啦,畢竟Docker這么好用
接下來讓Linux主機上的文件可以共享文件到Docker容器中,這樣一來我們可以直接在Docker中使用Linux主機文件,然后運行起來,當有文件改動,只需要更新Linux主機上的文件即可。這里會遇到一個問題,就是明明已經用了共享目錄的命令,但是Docker容器中並沒有那些文件,這是由於selinux的原因,我的解決方案就是在 -v加上一個--privileged=true,當然這個方案也是靠度娘得知的。
當前Docker容器中已經有了共享目錄下的文件,可能會需要dotnet restore然后可以用dotnet run進行啟動
方式二:在Docker容器中獲取aspnetcore鏡像
docker pull microsoft/aspnetcore //安裝asp.net core鏡像
查看當前已經有的鏡像,成功安裝了aspnetcore鏡像
同樣和前面的操作一樣,我們根據該鏡像新建一個容器
docker run -it microsoft/aspnetcore //運行一個以aspnetcore為鏡像的容器
同樣新建一個應用,但是會發現這個應用不能成功,提示我們沒有SDK
dotnet new mvc -n HelloDocker.Web //創建項目名為HelloDocker.Web的ASP.NET Core MVC項目
在這里我要解釋下dotnet鏡像和aspnetcore鏡像是什么關系:
在dockerhub官網中有着dotnet和aspnetcore的鏡像,dotnet可以看作是集大成者,包含了.net core控制台aspnetcore的所有,而aspnetcore是以dotnet鏡像為基礎,在aspnetcore中只包含了RunTime和構建當前項目為鏡像的工具,這也就意味着如果我們要直接使用aspnetcore為鏡像,我們的項目是要已經編譯好了的,才可以直接使用這個鏡像。而當你使用dotnet鏡像時,包含了編譯工具,Runtime,一切的一切,這也就是dotnet鏡像比aspnetcore鏡像大這么多的原因了。
可以利用方式一最后在Linux下編譯好的項目,同樣用共享目錄的方式共享到有aspnetcore鏡像的Docker容器中,這樣我們就可以直接跑起來了。由於時間關系沒有嘗試,下次會嘗試一下。這樣做的好處是在開發環境中編譯好的項目我們可以直接拿來用,Docker容器中只需要運行時環境就可以了。
四、DockerFile文件的作用
DockerFile可是好東西,好比如說拿着武功秘籍,一招一式照着做。一般是在項目中建好一個dockerfile文件,然后在其中寫上我們的要求
FROM microsoft/dotnet:latest WORKDIR /app
COPY . /app RUN dotnet restore EXPOSE 5000 ENV ASPNETCORE_URLS http://*:5000 ENTRYPOINT ["dotnet","run"]
通過命令將dockerfile文件運行,將整個項目打包成鏡像,我們可以使用docker images可以看到這個生成的新鏡像
docker build -t mydockerimage .
如果我們需要使用這個鏡像,我們可以直接在創建容器時指定這個鏡像,生成之后的環境和你打包的鏡像是一樣的。
最后感謝博友的文章參考,半只不解的時候正好看到這篇文章,很順利的解決了一個問題。@聖傑 http://www.cnblogs.com/sheng-jie/p/8107877.html
新年之際,在此祝願大家 新年吉祥 大吉大利。
2018-1-1,望技術有成后能回來看見自己的腳步